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