私はシェルスクリプトには比較的新しいので、この状況は私には困惑しています。私は、シェルスクリプトの実行/結果とともに、シェルスクリプトを挿入しました。太字の「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$
結果、事前にありがとうございます!
「sh」は通常「bash」ではありません。 – Cyrus
@Cyrusのコメントを拡張:[[]] 'は/ bash/shがサポートしていないbash機能です。シバンを '#!/ bin/bash'に変更するか、' [] 'に切り替えてください(' = 'ではなく、' == '、*と*を使ってすべての変数とコマンド展開を二重引用符で囲みます)。 [shellcheck.net](http://www.shellcheck.net)は、このような間違いを見つけ出すのに適しています。 –
ありがとうございます。私が言ったように、私はこれでかなり新しく、このコードを継承しました。私は実際にはかなりの検索をしましたが、私は新しいと思っていますが、質問を正しく行う方法を本当に知りませんでした。だから、私がシボンに入れたもので、どのシェルを使うのか、それとも単なるコメントなのか、私が使うシンタックスは、利用可能なシェルに基づいて、どのシェルを使っているかを本当に決定するものです私の/ etc/shellsファイル?私の場合、/ binに/ shのシェルが使用されている /binに/ bashの /sbinに/ nologinに /binに/ダッシュ /binに/ tcshの /binに/ cshの – RSteffy