だから私は数字で埋められたファイルが存在するかどうか私のスクリプトがテストできるようにしたいと思います。これを行うことはできますが、操作が完了したらすべての行のすべての数字を確認するので、しばらく実行してファイルの数字が奇数か偶数かを確認したいと思います。私が知っているのは、私のスクリプトが正しく設定されていませんが、以下のコードは目的の結果を生成しません。
exist=rnddata.txt
if [ -f $exist ]; then
echo "file exist processing"
else
echo "file does not exist"
exit1
fi
while read exist
do
if [ $((exist % 2)) -eq 0 ]; then
echo "even"
else
echo "odd"
fi
done
exit
答え1
この試み:
while read number
do
if [ $((number % 2)) -eq 0 ]; then
echo even
else
echo odd
fi
done < "$exist"
read
コマンドラインから変数を読みます。したがって、ファイルデータread
を取得するには、ループにファイルデータを供給する必要があります。ここでは、< "$exist"
これを実行するためにafterループを使用します。done
while
このread
コマンドはシェル組み込みコマンドなので、マンページはありません。動作方法を確認するには、次のように入力してください。man sh
(ヒント、readonly
この方法で検索する方が簡単なので検索してください。)
答え2
ほとんどの場合、次のことを心配する必要はありません。
if [ -e "$file" ]
then echo exists
else echo not exists
fi
人々がこのようなことをするとき、彼らは本当に彼らの努力を無駄にしているのです。あるスクリプトと他のスクリプトの動作と出力形式との間に関連性がほとんどないため、問題になる可能性があります。とにかく、次の理由ですべて無駄になりました。
sh -c 'exec <not_exist; echo can i\?' my_zero
my_zero: 1: my_zero: cannot open not_exist: No such file
スクリプト化されたPOSIXシェルは、組み込みの特殊シェルが失敗したシェルリダイレクトのターゲットである場合はstderrに書き込むことで終了します。特別な組み込み機能は次のとおりです。
: continue break exec set . shift unset
times trap exit export readonly eval return
次のように呼び出して特殊状態をダウングレードできますcommand
。
sh -c 'command exec <not_exist; echo can i\?' my_zero
my_zero: 1: my_zero: cannot open not_exist: No such file
can i?
したがって、ファイルの読み取り/書き込みを強力に処理するための最も簡単で効率的な戦略は、対話したいファイル記述子にファイルを直接配置し、必要に応じてシェルにすべてのエラー出力を処理させることです。そうする必要がある場合、そしてアクションがそれ自体で話すようにする方向にスクリプトを作成すると、それは起こります。
sh -c '
cat_fname()
for f
do exec <"$f"
printf "\n%-5s%-$((${#f}+2))s%s\n" === "$f" ===
cat
done
cat_fname a[1-9]/a[1-9].txt not_exist /dev/fd/0'
=== a1/a1.txt ===
1 1 1 11 1 1 1 1
=== a2/a2.txt ===
2 2 2 12 2 2 2 2
=== a3/a3.txt ===
3 3 3 13 3 3 3 3
=== a4/a4.txt ===
4 4 4 14 4 4 4 4
=== a5/a5.txt ===
5 5 5 15 5 5 5 5
=== a6/a6.txt ===
6 6 6 16 6 6 6 6
=== a7/a7.txt ===
7 7 7 17 7 7 7 7
=== a8/a8.txt ===
8 8 8 18 8 8 8 8
=== a9/a9.txt ===
9 9 9 19 9 9 9 9
sh: 4: cannot open not_exist: No such file