Linux bashのif文

Linux bashのif文

ifステートメントで2つの文字列を比較しようとしています。しかし、プログラムが毎回最初の条件を通過するため、比較が正しく実行されないようです。

#!/bin/bash
switch=$(ssh 192.168.14.10 egrep somefile /tmp/tmpfile.txt)
if [ "$switch" == "tmp" ]; then
     echo "expected output"
else
     echo "unexpected output"
fi

毎回「期待される出力」が達成される。最初の条件を「!=」に変更しようとしましたが、まだ最初のステートメントに到達します。

答え1

あなたの比較は正確で慣用的なBashコードです。

echo "switch='$switch'"以前に挿入を試みif、毎回変数の内容が何であるかを確認してください。

答え2

まず、偽の空白を除外します。

if [ "$(printf "%s" "$switch"| tr -d " ")" = tmp ]; then

それでも失敗する場合は、テストする前に次の2行を追加してください。出力が異なる場合はテストを修正してください。

echo tmp | od -c
echo "$switch" | od -c

答え3

最初の行を次に変更します。

switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

次に:

export switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

以前または変数を増やしている間、ほぼ同じ問題が複数回発生しました。 wherevariable=$variable++または追加する代わりに、ループを介して毎回variable=$variable+1テキスト文字"+1"列を"++"最後に追加します。

問題をすぐに使用let variable=$variable++または解決してください。ループが始まる前にすべてが設定されていても、を使用できます。let variable=$variable+1export

私はその変数を保存するときbashが何か間違っていると思います。したがって、比較タスクを実行し、それを保存するためにlet / exportを使用して他のタスクを実行します。同じ質問に対する答えを探していますが、文字列の代わりに数値を比較すると、一貫性のない結果が表示されます。とにかく、最初のドアの前にエクスポートを試してみるのは悪いことではありません。

関連情報