2017-11-01 15 views
-1

私はシェルスクリプトには比較的新しいので、この状況は私には困惑しています。私は、シェルスクリプトの実行/結果とともに、シェルスクリプトを挿入しました。太字の「if/then/elif/then/else/fi」条件(TEST1.shの最後の8行)は、元のスクリプトの期待どおりに動作していない部分です。デバッグの目的で、elifでecho文を追加しました。最後に、grepコマンドを実行し、期待値1を返しますが、結果をFILECOUNT(1に設定)と比較すると、それらは等しくありません。この条件が真でない理由は何ですか?

TEST1.sh

#!/bin/sh 
export TERM="xterm" 
SDSELIGLOG=/data3/NEI-SCRIPTS/logs/SDSEligWeekly.log 
FILECOUNT="1" 
# 
echo "grep cmd returns result=" 
grep -c "100%" $SDSELIGLOG 
# 
if [[ 'grep -c "100%" $SDSELIGLOG' == $FILECOUNT ]]; then 
    echo "TRUE" 
else 
    echo "FALSE" 
fi 
# 
**if [[ `grep "Incorrect login information" $SDSELIGLOG` ]]; then 
     echo "FTP Connection Failed!" 
    elif [[ 'grep -c "100%" $SDSELIGLOG' == "$FILECOUNT" ]]; then 
     echo "Hits elif section of code" 
     #Continue script normally 
    else 
     echo "File transfer process did not complete fully!" 
fi** 

実行/

sh-4.1$ ./TEST1.sh 
grep cmd returns result= 
1 
FALSE 
File transfer process did not complete fully! 
sh-4.1$ 

結果、事前にありがとうございます!

+0

「sh」は通常「bash」ではありません。 – Cyrus

+0

@Cyrusのコメントを拡張:[[]] 'は/ bash/shがサポートしていないbash機能です。シバンを '#!/ bin/bash'に変更するか、' [] 'に切り替えてください(' = 'ではなく、' == '、*と*を使ってすべての変数とコマンド展開を二重引用符で囲みます)。 [shellcheck.net](http://www.shellcheck.net)は、このような間違いを見つけ出すのに適しています。 –

+0

ありがとうございます。私が言ったように、私はこれでかなり新しく、このコードを継承しました。私は実際にはかなりの検索をしましたが、私は新しいと思っていますが、質問を正しく行う方法を本当に知りませんでした。だから、私がシボンに入れたもので、どのシェルを使うのか、それとも単なるコメントなのか、私が使うシンタックスは、利用可能なシェルに基づいて、どのシェルを使っているかを本当に決定するものです私の/ etc/shellsファイル?私の場合、/ binに/ shのシェルが使用されている /binに/ bashの /sbinに/ nologinに /binに/ダッシュ /binに/ tcshの /binに/ cshの – RSteffy

答えて

1
elif [[ 'grep -c "100%" $SDSELIGLOG' == "$FILECOUNT" ]]; then 

これらは、一重引用符ではなく、バッククォートである必要があります。

elif [[ `grep -c "100%" $SDSELIGLOG` == "$FILECOUNT" ]]; then 
+1

メンテナンス性のためには、 '$(...) 'にする必要があります。 –

+0

' $() 'は一般的にバッククォートよりも好まれます。視覚的に曖昧ではありません(この問題の原因です)また、バッククォート内で取得する奇妙な引用/エスケープ構文もありません。 –

関連する問題