Bashスクリプト:出力がありません。エラーはありません!

Bashスクリプト:出力がありません。エラーはありません!

ユーザーから入力を受けていくつかの条件を確認した後、新しい変数に保存するように設計された次のコードをテストしています。ただし、このコードはシェル端末で実行されたときに出力やエラーを提供しません。ファイルに実行権限を付与しましたsudo chmod +x test.sh

#!/bin/bash

counter="0"
iso_val="100"

while [ "$counter" == "3" ]
do
    echo -n "Enter ISO [ 100-800 ]: "; read iso
    if (( "$iso" < "100" )) || (( "$iso" > "800" )); then
        echo "Error!"
    elif [ "$iso" == "" ]; then
        echo "Error!"
    else
        iso_val=$iso
        break
    fi
    counter=$[$counter + 1]
done

ベストアンサー1

作成したスクリプトはエラーなしで実行され、出力は生成されません。

クイックメモ:デバッグ時に良い起動を得るには、一時的にスクリプトの先頭に追加するset -x必要があります。bash

問題は次の行にあります。

while [ "$counter" == "3" ]

行の後のブロックはdo同じ場合にのみ実行されますが、ブロックが実行されない場合は増加しません。$counter3$counterdo

カウンターを増やすには、実行したいブロックの外で操作を実行する必要があります。つまり

#!/bin/bash

counter="0"
iso_val="100"

while [ "$counter" -lt 3 ]
do
    echo -n "Enter ISO [ 100-800 ]: "; read iso
    if [ -z "$iso" ] || [ "$iso" -lt 100 ] || [ "$iso" -gt 800 ]; then
        echo "Error!"
    else
        iso_val=$iso
        break
    fi
    counter=$(($counter + 1))
done

実行回数に制限を設定しましたwhile。それ以外の場合、スクリプトはエラーで終了しません。また、可能な限り文字列比較を整数比較に変更します。

編集:「エラー時に最大3回要求」コメントに明示的な要件を持つ新しいスクリプト

おすすめ記事