[問題] ethtool 在script的問題

作者: 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
作者: kenwufederer (Nash)   2016-11-15 11:50:00
第一個才是正確的吧,問題在if那邊…你第二個KRIS根本錯誤
作者: dou0228 (7777)   2016-11-15 11:51:00
${KR1S}第一行的也沒加``或$()來收
作者: kenwufederer (Nash)   2016-11-15 11:53: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 ...把 == 換成 = 會變成語法錯誤@@
作者: kenwufederer (Nash)   2016-11-15 12:43:00
不是本來就有錯誤嗎?
作者: Rossi30 (羅西三十)   2016-11-15 12:46:00
第二個寫法拿掉好了,我也覺得這樣寫是錯的@@
作者: Gold740716 (項為之強)   2016-11-15 13:18:00
第三行等號兩邊不能有空白...,因為 sh 允許在命令前賦值。像 LANG=zh man ls 。第三行會會清空一個變數,然後把 $() 內的結果當成命令呼叫。
作者: lantw44 (#######################)   2016-11-15 13:31:00
注意 == 並不是所有 shell 都支援,通常用 = 會比較好
作者: Rossi30 (羅西三十)   2016-11-15 13:47:00
謝謝G大,謝謝各位,問題已解決了!!!!
作者: Gold740716 (項為之強)   2016-11-15 13:56:00
還有如果 var=$() 的結果有空隔,要寫成 var="$()"
作者: kenduest (小州)   2016-11-15 14:25:00
因為 ! 字元在 shell 有特別的意思,要改成 'Unknown!'用單引號包起來就可以了.另外是鼓勵用 grep 搜尋判斷傳回值,問題比較少另外程式碼部分 a=$(...) 這語法, = 後面不可以有空白正確 a=$(....) 語法,a= $(....) 這會有問題
作者: Rossi30 (羅西三十)   2016-11-15 16:04:00
好的謝謝各位~~~!!!!
作者: Gold740716 (項為之強)   2016-11-15 16:05:00
樓上 ! 還好吧?包在字串中應該沒問題。
作者: kenduest (小州)   2016-11-15 19:28:00
記得多空白那後續判斷 Unknown 前面,也要多空白字元啊,反而困擾

Links booklink

Contact Us: admin [ a t ] ucptt.com