[问题] 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