シェルスクリプトを使用してあるファイルを読み取り、別のファイルに書き込む方法

シェルスクリプトを使用してあるファイルを読み取り、別のファイルに書き込む方法

以下のファイルがあります(file1.txt)

258.2222

file1.txtこの値を別のファイルに書き込む必要があります。値がない場合は、null file1.txt"Passed"を印刷する必要があります。

これが私が試したことです。

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

(null)に値がない場合file1.txt

Passed

誰でもこの問題を解決するのに役立ちますか?よろしくお願いします!

注:ユニバーサルスクリプト言語(JavaScript、Pythonなど)の使用は許可されていません。

ベストアンサー1

うまくいかない理由はforループによるものです。ファイルに値がない場合、ループにはfor繰り返す項目がないため開始も行われず、if評価も実行されません。ただし、ファイルには1行しかない可能性があるため、繰り返すことは意味がありません。次のようにしてください。

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

次にスクリプトを実行し、出力をファイルにリダイレクトします。出力ファイル名をハードコードするのは通常悪い習慣です。これにより、誤って同じ名前の既存のファイルが上書きされ、スクリプトの使用方法も制限される可能性があります。

script.sh > file2.txt

ファイルにスペースがある場合でも印刷されます。これは「何も」ではなく「何か」だからです。

おすすめ記事