作者:
Rossi30 (羅西三十)
2016-11-15 11:21:49大家好,小弟最近在玩ethtool這東西並嘗試寫了個簡單的語法
但是發現只要他是變數我的scrpit就會出錯
#!/bin/sh
KR1S= $(ethtool eth1 | grep 'Speed' | cut -d ' ' -f 2)
if [ "$KR1S" == "Unknown!" ] ; then
sleep 1s
echo "# Speed ...PASS"
else
echo "# Speed ...FAIL"
fi
執行後跳出
./test.sh: line 3: Unknown!: command not found
第一個才是正確的吧,問題在if那邊…你第二個KRIS根本錯誤
作者: dou0228 (7777) 2016-11-15 11:51:00
${KR1S}第一行的也沒加``或$()來收
作者:
ckc1ark (偽物)
2016-11-15 12:03:00把==換成=試試
作者:
Rossi30 (羅西三十)
2016-11-15 12:38:00我改成 if [ "${KRS}" = "Unknown!" ] ; 但變成是./test.sh: line 3: Unknown!: command not found ...把 == 換成 = 會變成語法錯誤@@
作者:
Rossi30 (羅西三十)
2016-11-15 12:46:00第二個寫法拿掉好了,我也覺得這樣寫是錯的@@
第三行等號兩邊不能有空白...,因為 sh 允許在命令前賦值。像 LANG=zh man ls 。第三行會會清空一個變數,然後把 $() 內的結果當成命令呼叫。
作者:
lantw44 (#######################)
2016-11-15 13:31:00注意 == 並不是所有 shell 都支援,通常用 = 會比較好
作者:
Rossi30 (羅西三十)
2016-11-15 13:47:00謝謝G大,謝謝各位,問題已解決了!!!!
還有如果 var=$() 的結果有空隔,要寫成 var="$()"
因為 ! 字元在 shell 有特別的意思,要改成 'Unknown!'用單引號包起來就可以了.另外是鼓勵用 grep 搜尋判斷傳回值,問題比較少另外程式碼部分 a=$(...) 這語法, = 後面不可以有空白正確 a=$(....) 語法,a= $(....) 這會有問題
作者:
Rossi30 (羅西三十)
2016-11-15 16:04:00好的謝謝各位~~~!!!!
記得多空白那後續判斷 Unknown 前面,也要多空白字元啊,反而困擾