2013-06-18 51 views
0

我試圖寫一個非常簡單的shell腳本像下面這應該基本上連接到遠程服務器,只是在其根目錄計數線,零&打印輸出像比較下面給出,但如果條件總是給人錯誤:如果條件沒有shell腳本正常工作

integer expression expected

這裏是我的代碼:

#!/bin/sh 
i=servername 
var1=$(ssh [email protected]$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

「緊急」在SO上是不合適的。 –

+0

如果你可以使用bash('#!/ bin中/ bash'),然後用'如果[[$ VAR1 -gt 0]' – SheetJS

回答

1

有可能在你的ssh命令的輸出等(可能不可見)的字符。

嘗試通過該輸出通過sed將剝離所有非數字:

var1=$(ssh [email protected]$i -t "cd /;ls -l|wc -l" 2>/dev/null | sed -e 's/[^0-9]//g') 
+0

作品代替if語句!非常感謝Nate! – mak

-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 [email protected]$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 
+0

我不知道爲什麼im downvoted? – exussum

+1

引用不起作用,您不應引用整數比較。如果您正在進行字符串比較,則只需引用變量即可。 – mplf

+0

使用我提供的工作的確切路線,使用他給出的錯誤列出。因此,它明確工作 – exussum

0

,這是失敗的原因是,因爲無論什麼被分配到VAR1或VAR1包含額外的字符。 wc對此是一個討厭的東西,它打印所有縮進到特定位置的東西,所以我通常會做的就是通過awk來獲取這個數字。

嘗試:

var1=$(ssh [email protected]$i -- "cd /; ls -l | wc -l | awk '{print $1}'") 
0

您的數據可能包含一個結尾回車。我可以重現錯誤:

$ /bin/sh 
sh-4.2$ var1=28 
sh-4.2$ [ $var1 -gt 0 ] 
sh-4.2$ [ $var1 -gt 0 ] && echo OK 
OK 
sh-4.2$ var1=28^M 
sh-4.2$ [ $var1 -gt 0 ] 
: integer expression expected 

^M是文字回車,打按Ctrlv按Ctrl 米

要驗證您的數據:

printf "%s" "$var1" | od -c 

使用@Nate或@mplf的建議來修剪不需要的字符。

相關問題