Pil*_*ila 5 shell scripting busybox
我的sh脚本语法有问题。我为我的华硕路由器写了一个脚本。该脚本完美运行。但我有这条线:
if [[ "$OldIP" && "$StartIP" != "$OldIP" ]]; then echo OK; fi
Run Code Online (Sandbox Code Playgroud)
echo OK只有当$StartIP和$OldIP不相同时,它才应该是真的(和执行)。这条线有效,但我希望看到它更有效地完成。变量包含有效的 IP 地址。
在某些情况下,$OldIP不会分配任何东西(未初始化)。但是,如果$OldIP不存在,这意味着它们在我的外壳中不一样!
我不希望该行执行: if$OldIP不存在 -> 测试它们是否不同 -> run echo OK。
我确实希望该行表示:a) 如果$OldIP不存在 -> 结束。加 b) 如果$OldIP存在 -> 测试它们是否不同 -> 运行echo OK。
所以,"$OLDIP" &&如果可能的话,我想以某种方式删除 。不是真正的问题;好奇学习:)
排序(但它不起作用):
if [ [ "$OldIP" ] != "$StartIP" ]; then echo OK; fi
Run Code Online (Sandbox Code Playgroud)
或者
if [ $OldIP != "$StartIP" ]; then echo OK; fi
Run Code Online (Sandbox Code Playgroud)
它做我想要的,但在OldIP为空时抱怨(但工作正常)
尽管
if [ "$OldIP" != "$StartIP" ]; then echo OK; fi
Run Code Online (Sandbox Code Playgroud)
有效但忽略OldIP为空
我认为你的脚本非常有效。您当然不会在这方面花费很多周期。
另一种编写逻辑的方法:
{ test -n "$OldIP" || test "$StartIP" != "$OldIP"; } && echo OK
Run Code Online (Sandbox Code Playgroud)
这表示“如果设置了 OldIP 或者 OldIP 和 StartIP 不同,则回显 OK。
请记住,这是您可以使用 阅读的[另一个名称。test(1)man 1 test
编辑:正如 Gilles 指出的那样,请注意避免( ... )在不需要的地方创建子 shell。
{ ... ; }可用于对命令进行分组,而无需执行新的 shell。
简要参考:http://www.gnu.org/software/bash/manual/html_node/Command-Grouping.html