0

リモート サーバー上のファイルの存在を 1 時間ごとにチェックする単純な BASH スクリプトを作成しました。KSH を実行するサーバーに移動するように依頼されるまで、エラーは発生しませんでした。

エラーが発生するコードの部分は次のとおりです。

connect_string=$UID@$SERVER:$srcdir/$EVENTFILE
result=`sftp -b "$connect_string" 2>&1`

if [ echo "$result" | grep "not found" ]; then
  echo "not found"
else
  echo "found"
fi

これらは、スローされるエラーです。

-ksh: .[51]: [: ']' missing
grep: ]: No such file or directory
found

それでも実行され、ポーリングしているファイルがそこにあることを確認しますが、これを修正する必要があります。私はif文をそのように変更しました

if [[ echo "$result" | grep "not found" ]]; then

しかし、このエラーですぐに失敗します

-ksh: .: syntax error: `"$result"' unexpected

私は何が欠けていますか?

4

4 に答える 4

0
echo "$result" | grep "not found"
#capture exit status code from previous command ie grep.
if [[ $? == 0 ]]
than
 echo "not found"
else
 echo "found"
fi
于 2013-11-08T18:22:23.723 に答える
0

あなたは bash/ksh 制御構造の基本的な信条に苦労しているようです。

ifと のキーワードの間thenに、シェルは 1 つ以上のコマンドを想定し、一連のコマンドの最後のコマンドがifステートメントの処理方法を決定します。

角括弧は、実際に比較を実行する必要がある場合にのみ必要です。内部的にはコマンドと同等testです。比較が成功すると、終了ステータスは 0 になります。

例:

$ [ a == a ]
$ echo $?
0
$ [ a == b ]
$ echo $?
1

これは次と同等です:

$ test a == a
$ echo $?
0
$ test a == b
$ echo $?
1
于 2013-11-14T20:31:17.323 に答える