ファイルから数字を読み、偶数か奇数かを確認するヘルパースクリプト

ファイルから数字を読み、偶数か奇数かを確認するヘルパースクリプト

だから私は数字で埋められたファイルが存在するかどうか私のスクリプトがテストできるようにしたいと思います。これを行うことはできますが、操作が完了したらすべての行のすべての数字を確認するので、しばらく実行してファイルの数字が奇数か偶数かを確認したいと思います。私が知っているのは、私のスクリプトが正しく設定されていませんが、以下のコードは目的の結果を生成しません。

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ループを使用します。donewhile

この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

関連情報