Linux

如何使用 shell 腳本讀取文件並寫入另一個文件

  • September 27, 2022

我有一個看起來像這樣的文件(file1.txt)

258.2222

我必須將此file1.txt值寫入另一個文件。如果沒有值(空),file1.txt那麼它應該列印為“通過”。

這就是我嘗試過的

for final in $(cat file1.txt);do
if [ "$final" ];then
       echo $final  > file2.txt
else
       echo "Passed" > file2.txt
fi
done

這僅適用於 1 種情況。如果其中沒有值,file1.txt則它不會寫為**“通過”**

預期輸出:

如果有一個值file1.txt

258.2222

如果沒有值(空)file1.txt

Passed

有人可以幫我解決這個問題嗎?提前致謝!

注意:我不允許使用通用腳本語言(JavaScript、Python 等)。

它不起作用的原因是for循環。當文件中沒有任何值時,for循環沒有任何內容可以迭代,因此它甚至不會啟動,因此if永遠不會評估。但是,由於文件中只能有一行,因此無論如何循環都沒有意義。只需執行以下操作:

final=$(cat file1.txt)
if [ -n "$final" ]; then
   printf '%s\n' "$final" 
else
   printf 'Passed\n'
fi

然後,執行腳本並將其輸出重定向到文件(硬編碼輸出文件名通常是不好的做法,因為這可能會導致無意中覆蓋任何具有相同名稱的現有文件,並且還會限制腳本的使用方式):

script.sh > file2.txt

請注意,如果文件只有空格,這也會列印出來,因為那是“某物”而不是“無”。

引用自:https://unix.stackexchange.com/questions/718867