gpt4 book ai didi

shell - 这个shell命令有什么问题

转载 作者:行者123 更新时间:2023-12-04 16:17:07 24 4
gpt4 key购买 nike

我正在尝试让为我们的嵌入式设备上的 busybox 编写的 shell 脚本运行。导致问题的行在下面,我已经包含了在带有 -x 标志的 shell 中运行它的输出。

if [ cut -d : -f 1-3 /sys/class/net/eth0/address | grep -q -i 01:02:03 ]; then
# Do stuff
fi

尝试运行时给出的输出:

# sh -x ./script
+ [ cut -d : -f 1-3 /sys/class/net/eth0/address
sh: missing ]
+ grep -q -i 01:02:03 ]
grep: ]: No such file or directory
+ sync

脚本最初不是我写的,所以我不知道它什么时候停止工作的。似乎用于比较的命令(如果 mac 地址前缀与给定样本匹配,则应返回 1,否则返回 0)未正确运行,但我不知道为什么它似乎试图将命令分开.

最佳答案

问题是您正在使用 [ 就好像它是语法一样,而在 shell 中它是一个命令,需要将特定参数传递给它。

我认为修复应该像删除 [ 和相应的 ] 一样简单(这是 [ 期望的最后一个参数) :

if cut -d : -f 1-3 /sys/class/net/eth0/address | grep -q -i 01:02:03; then

在 shell 中,if 通过查看命令的返回码来工作,无论它是 [ 还是任何其他。

顺便说一句,我认为 grep-i 选项在这种情况下没有任何用处,因此您可以删除它。


请注意,您的条件可以简化(感谢 chepner):

if grep -q '^01:02:03(:|$)' /sys/class/net/eth0/address; then

匹配行的开头,然后是您已有的部分,然后是冒号或行尾。

或者:

if [ "$(cut -d : -f 1-3 /sys/class/net/eth0/address)" = 01:02:03 ]; then

对 cut 命令的输出进行直接字符串比较,而不是通过管道传递给 grep。

关于shell - 这个shell命令有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39250637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com