2016-06-26 6 views
-1

でbashシェルのエラーを非表示にする:は、どのように私は小さなスクリプトを持っている画面

if [ $proxy_chooice -eq 1 ]; then 

echo 'Choose kinds of proxy\n 1)http 2) https 3)ftp' 

read proxyType 

ユーザーが入力または単語はその後、入力書き込みます。 それは私が私が何ができるか、これらのエラーを非表示にする

test.sh: 50: [: -eq: unexpected operator 

を書き出します。ありがとうございました。

+2

エラーを修正するのではなく、そのエラーを隠すのはなぜですか?それは悪い習慣です! –

+0

'stderr'(エラー出力)を' nullデバイス ''/dev/null'にパイプできるはずです。スクリプトのコマンドラインコールに '2/dev/null'を追加するだけです。 – arkascha

+0

このスクリプトで私を助けてくれますか?私はチェック番号だけを必要とします、私はユーザにスクリプト名を知らせたくありません。 –

答えて

2

あなただけの出力を抑制したい場合は、単に2>を/ dev/nullを追加します。

$ rm non-existent-file 
rm: cannot remove `non-existent-file`: No such file or directory 
$ rm non-existent-file 2>/dev/null 
$ 

しかし、あなたのケースを処理するための正しい方法は、あなたが比較しようとしている変数がないかどうかを確認することです比較の前に空です...

0

エラーは$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! 
-2

問題、および[[ ${PROXY_TYPE} -eq 1 ]]がより優れている:)

#!/bin/bash 

if [[ ${PROXY_CHOOICE} -eq 1 ]]; then 
    echo 'Choose kind of proxy\n 1)http 2)https 3)ftp' 
    read PROXY_TYPE 

    # do your logic here... 
    case ${PROXY_TYPE} in 
    1) echo 'your chooice is http';; 
    2) echo 'your chooice is https';; 
    3) echo 'your chooice is ftp';; 
    *) echo 'you choose nothing';; 
    esac 

fi 
+0

変数名の大文字と小文字を変更することでこの問題を解決することはできません。 – Kusalananda

+0

@Kusalananda問題の解決に関連する点はありますか?大文字にするには、外部環境に影響する変数が適している。 –

+0

私はこの問題は最初の 'if'文と変数' proxy_chooise'の値と関係していると思います。私は今あなたが '[[...]]を使って切り替えたことを知っています。 '$ PROXY_CHOOICE'が空であればスクリプトは*エラーをスローしません。空の値*が有効であると仮定しているならば、あなたの解は良いです。 – Kusalananda

関連する問題