0

以下のような非常に単純なシェルスクリプトを作成しようとしていますが、これは基本的にリモートサーバーに接続し、そのルートディレクトリで行を数えるだけで、ゼロと比較して以下のような出力を出力しますが、 if 条件は常にエラーを与えます:

整数式が必要です

これが私のコードです:

#!/bin/sh
i=servername
var1=$(ssh username@$i -t "cd /;ls -l|wc -l" 2>/dev/null)
echo $var1   #(gives me a number output e.g 28)
if [ $var1 -gt 0 ]
then
echo "successfuly connected"
else
echo "failed to connect"
fi
4

4 に答える 4

1

ssh コマンドの出力には、他の (見えない可能性がある) 文字が含まれている可能性があります。

その出力を sed に渡して、数字以外のすべてを削除してみてください。

var1=$(ssh username@$i -t "cd /;ls -l|wc -l" 2>/dev/null | sed -e 's/[^0-9]//g')
于 2013-06-18T20:25:05.813 に答える
0

これが失敗する理由は、var1 に何も割り当てられていないか、var1 に余分な文字が含まれているためです。wcはこれのバグです。特定の場所にインデントされたすべてを出力するので、私が通常行うことは、これを awk にパイプして番号だけを取得することです。

試す:

var1=$(ssh username@$i -- "cd /; ls -l | wc -l | awk '{print $1}'")
于 2013-06-18T20:29:40.443 に答える
-2

このように書かれるべきです

if [ "$var1" > "0" ]

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.htmlの 7.1.2.2を見てください。数値比較

ファイル全体

#!/bin/sh
i=servername
var1=$(ssh username@$i -t "ls -l|wc -l" 2>/dev/null)
echo $var1
if [ "$var1" > "0" ]
then
echo "successfuly connected"
else
echo "failed to connect"
fi

私にくれます

29
successfuly connected
于 2013-06-18T20:28:43.340 に答える