[問題] ethtool 在script的問題

看板Linux作者 (羅西三十)時間9年前 (2016/11/15 11:21), 9年前編輯推噓2(3125)
留言29則, 7人參與, 最新討論串1/1
大家好,小弟最近在玩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 ------------------------------------------------- 想請問一下這是會是甚麼問題呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.94.168 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1479180111.A.AE5.html ※ 編輯: Rossi30 (223.140.94.168), 11/15/2016 11:22:27

11/15 11:50, , 1F
第一個才是正確的吧,問題在if那邊…
11/15 11:50, 1F

11/15 11:50, , 2F
你第二個KRIS根本錯誤
11/15 11:50, 2F

11/15 11:51, , 3F
${KR1S}
11/15 11:51, 3F

11/15 11:52, , 4F
第一行的也沒加``或$()來收
11/15 11:52, 4F

11/15 11:53, , 5F
KR1S…
11/15 11:53, 5F

11/15 11:54, , 6F
其實錯誤都告訴你了…
11/15 11:54, 6F

11/15 11:59, , 7F
不要吝嗇縮排跟括號
11/15 11:59, 7F

11/15 12:03, , 8F
把==換成=試試
11/15 12:03, 8F

11/15 12:38, , 9F
我改成 if [ "${KRS}" = "Unknown!" ] ; 但變成是
11/15 12:38, 9F

11/15 12:39, , 10F
./test.sh: line 3: Unknown!: command not found ...
11/15 12:39, 10F

11/15 12:40, , 11F
把 == 換成 = 會變成語法錯誤@@
11/15 12:40, 11F

11/15 12:43, , 12F
不是本來就有錯誤嗎?
11/15 12:43, 12F

11/15 12:46, , 13F
第二個寫法拿掉好了,我也覺得這樣寫是錯的@@
11/15 12:46, 13F
※ 編輯: Rossi30 (223.140.94.168), 11/15/2016 12:47:25 照d大的說明改成這樣,也是會有錯誤 #!/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 ※ 編輯: Rossi30 (223.140.94.168), 11/15/2016 12:48:47

11/15 13:18, , 14F
第三行等號兩邊不能有空白...,因為 sh 允許在命令
11/15 13:18, 14F

11/15 13:21, , 15F
前賦值。像 LANG=zh man ls 。
11/15 13:21, 15F

11/15 13:23, , 16F
第三行會會清空一個變數,然後把 $() 內的結果當成命
11/15 13:23, 16F

11/15 13:23, , 17F
令呼叫。
11/15 13:23, 17F

11/15 13:31, , 18F
注意 == 並不是所有 shell 都支援,通常用 = 會比較好
11/15 13:31, 18F

11/15 13:47, , 19F
謝謝G大,謝謝各位,問題已解決了!!!!
11/15 13:47, 19F

11/15 13:56, , 20F
還有如果 var=$() 的結果有空隔,要寫成 var="$()"
11/15 13:56, 20F

11/15 14:25, , 21F
因為 ! 字元在 shell 有特別的意思,要改成 'Unknown!'
11/15 14:25, 21F

11/15 14:25, , 22F
用單引號包起來就可以了.
11/15 14:25, 22F

11/15 14:26, , 23F
另外是鼓勵用 grep 搜尋判斷傳回值,問題比較少
11/15 14:26, 23F

11/15 14:27, , 24F
另外程式碼部分 a=$(...) 這語法, = 後面不可以有空白
11/15 14:27, 24F

11/15 14:28, , 25F
正確 a=$(....) 語法,a= $(....) 這會有問題
11/15 14:28, 25F

11/15 16:04, , 26F
好的謝謝各位~~~!!!!
11/15 16:04, 26F

11/15 16:05, , 27F
樓上 ! 還好吧?包在字串中應該沒問題。
11/15 16:05, 27F

11/15 19:28, , 28F
記得多空白那後續判斷 Unknown 前面,也要多空白字元啊
11/15 19:28, 28F

11/15 19:28, , 29F
,反而困擾
11/15 19:28, 29F
文章代碼(AID): #1OAdzFhb (Linux)
文章代碼(AID): #1OAdzFhb (Linux)