エラーは$proxy_chooice
に値がありません(変数名にtypo?)。試験は、したがって
if [ -eq 1 ]; then
これがタイプミスの場合だけである場合、(ただし代わりに文字列の比較にそれを回すことによって、次いで、これは、「固定」してもよいとなるif
-statement WIL内のコード実行されません):
if [ "x$proxy_chooise" = "x1" ]; then
ではなく、エラー出力を「隠し」、あなたのコードを修正する必要があります。
無効な入力も適切に処理する必要があります。例えば
:
echo "You need proxying?"
select answer in "Yes" "No"; do
case $REPLY in
1|2) proxy_choice=$REPLY; break ;;
*) echo "Please select 1 or 2" ;;
esac
done
echo "$answer, sir!"
if [ $proxy_choice -eq 1 ]; then
echo "What kind of proxy would you require?"
select answer in "HTTP" "HTTPS" "FTP"; do
case $REPLY in
[1-3]) proxy_type=$REPLY; break ;;
*) echo "Please select 1-3" ;;
esac
done
echo "An $answer proxy? Excellent!"
fi
実行:
You need proxying?
1) Yes
2) No
#? 3
Please select 1 or 2
#? 2
No, sir!
第二に行く:[ $proxy_chooice -eq 1 ]
で
You need proxying?
1) Yes
2) No
#? 1
Yes, sir!
What kind of proxy would you require?
1) HTTP
2) HTTPS
3) FTP
#? 4
Please select 1-3
#? 2
An HTTPS proxy? Excellent!
エラーを修正するのではなく、そのエラーを隠すのはなぜですか?それは悪い習慣です! –
'stderr'(エラー出力)を' nullデバイス ''/dev/null'にパイプできるはずです。スクリプトのコマンドラインコールに '2/dev/null'を追加するだけです。 – arkascha
このスクリプトで私を助けてくれますか?私はチェック番号だけを必要とします、私はユーザにスクリプト名を知らせたくありません。 –