Linuxのシェルプログラミングエラー

Linuxのシェルプログラミングエラー

コードを修正する必要がありますか?

i=0; bil_genap=0;  
bil_ganjil=0;  
echo -n "Batas loop : ";  
read batas;  

if [ -z $batas ] | [ $batas -lt 0 ]; then  
    echo "Ops, tidak boleh kosong atau Batas loop harus >= 0";  
    exit 0;  
fi   
while [ $i -le $batas ]; do   
    echo -n "$i,";  
    if [ `expr $i % 2` -eq 0 ]; then   
        let bil_genap=$bil_genap+1;  
    else  
        let bil_ganjil=$bil_ganjil+1;  
        let i=$i+1;   
    fi  
done  

答え1

マイナーな問題に加えて、次の点に下線を引く必要があります。

if [ -z $batas ] | [ $batas -lt 0 ]; then  

~になる

if [ -z $batas ] || [ $batas -lt 0 ]; then  

代わりに:

if [ `expr $i % 2` -eq 0 ]; then  

あなたはそれを使用することができます

if (( $i % 2 == 0 )); then  

答え2

この記事には情報が不足し、これが私にとって奇妙で魅力的な挑戦となりました。まず、ロボット翻訳者は言語がマレー語であると言いました。同じことだと推測しました。空にできないか、制限ループがゼロより大きくなければなりません。

したがって、コードは入力値を要求し、値が空ではなくゼロ以上であることを確認し、実行すると無限に繰り返され、端末にゼロを送信します。エンコーダの最終目標が何であるかよくわからないので、正しい方法で「固定」したかどうかはわかりませんが、「let i = i + 1;」行を「else」ステートメントから移動するだけです。 、無限ループの代わりに入力のループ限界まで0からカウントして出力します。また、途中で出会う偶数と奇数の数も計算します。コードはそのままこれらの数に対して何もしません。たぶん、より大きなコードスニペットです。たぶん、誰かが楽しさのために実験しながら書いたおもちゃプログラムかもしれません。とにかく、偶数と奇数を出力する行が追加された「翻訳された」バージョンは次のとおりです。

i=0;
even_num=0;
odd_num=0;
echo -n "Limit of loop : ";
read loop_lim;

if [ -z $loop_lim ] | [ $loop_lim -lt 0 ]; then
    echo "Ops, Limit of loop cannot be empty and must be  >= 0";
    exit 0;
fi
while [ $i -le $loop_lim ]; do
    echo -n "$i,";
    if [ `expr $i % 2` -eq 0 ]; then
        let even_num=$even_num+1;
    else
        let odd_num=$odd_num+1;
    fi
    let i=$i+1;
done
echo
echo $even_num
echo $odd_num

関連情報