【发布时间】:2019-05-02 12:16:19
【问题描述】:
我不明白为什么这个 bash 脚本在 BusyBox v1.29.3 () 内置 shell (ash) 上不起作用。
代码如下:
#!/bin/sh
MODE=$(cat /etc/config/wireless | grep 'option mode') #not working
#MODE="option mode 'sta'" ==> this works
echo $MODE
MCHECK="option mode 'sta'"
echo $MCHECK
if [ "$MCHECK" = "$MODE" ];then
ping -c3 www.google.com > /dev/null
a=$?
echo $a
if [ $a -eq 0 ];then
echo "ok"
else
echo "fail"
fi
else
echo "no sta mode"
fi
如果我用变量“强制”字符串,它可以正常工作。(#MODE) 我想 cat 返回的变量中有一些字符会创建不同的字符串。
我总是得到“无 sta 模式”,所以 if 不会返回 true。 etc/config/wireless 中的选项模式与要比较的字符串相同。
找不到我缺少的东西..?
【问题讨论】:
-
在
if表达式中将[[ == ]]替换为[ = ]。[[是 Bash 语法。[是 Bourne shell 语法。 -
用双引号将结果字符串括起来,
MODE="$(cat /etc/config/wireless | grep 'option mode')" -
我编辑是因为有一个错误@Anubis 谢谢,我试过了,但没有用
-
问题是
cat /etc/config/wireless | grep 'option mode'没有提供你需要的东西。您是否手动验证了这一点?输出应该与$MCHECK内容“相同”。 -
好的,我找到了。猫 /etc/config/无线 | grep 'option mode' 在“option mode 'sta'”之前返回 8 个空格 如果我将 MCHECK="option mode 'sta'" 更改为 MCHECK="8spaceshereoption mode 'sta'" 这有效!谢谢你们!
标签: bash string-comparison busybox