如何修复使用[命令的Shell if语句运行时报错问题
报错原因
[本质是bash内置的test命令,要求最后一个入参必须是],且入参不能直接包含管道语句。你在[内部直接写带管道的命令、用转义括号\(包裹的写法完全不符合[命令的语法规则。- 转义后的括号没有触发子shell执行逻辑,反而被拆成了后续命令的参数:
grep把后面的\)、]都当成了要搜索的文件名,所以报找不到对应文件的错误;同时[命令没有收到预期的闭合]参数,抛出缺少]的报错。
修复方案
你要判断的是lsusb -t | grep -q 'qmi_wwan'这条命令是否匹配到内容,直接把这条命令放在if后面做判断条件即可,不需要额外套[:
if lsusb -t | grep -q 'qmi_wwan'; then echo 'yes' else echo 'no' fi
说明
grep加-q参数时不会输出任何匹配结果,只会在匹配到内容时返回0状态码,未匹配到返回非0状态码,if会直接判断后面跟的命令的状态码,0则判定为条件成立走then分支,非0走else分支,完全符合你的需求。
内容的提问来源于stack exchange,提问作者A6EE
相关产品推荐
相关产品推荐

