我正在尝试让这个小脚本正常工作,告诉我是否启用了两个选项之一。它似乎适用于第一个 if 语句,但不适用于接下来的两个。谁能指出我正确的方向来完成这项工作?
编辑:这个脚本的目的是我可以运行的东西,检查 tun0 (或 tun 的任何变体存在于 ifconfig 输出中)是否存在,如果存在,我就完成了,如果不存在,我需要检查其他两行之一是否在“test.ini”文件中被标记为"is",看看 tun0 丢失是否有什么值得关注的,或者我是否可以跳过它。 7 号线和 12 号线是这个区域让我感到困惑的地方。很抱歉我没有提前澄清这一点。
1 #!/bin/bash
2
3 if [[ $(ifconfig|grep -iq tun;echo $?) -eq 0 ]]
4 then
5 echo "This unit has tun0"
6 else
7 if [[ $(grep -iq enabled=yes test.ini|grep -v "Auto\|Purge\|AD"|awk '{print $1}';echo $?) -eq 1 ]]
8 then
9 echo "This unit has file copy enabled"
10 echo "but does not have tun0"
11 else
12 if [[ $(grep -iq AutoSyncEnabled=yes test.ini|grep -v Exchange|awk '{print $1}';echo $?) -eq 1 ]]
13 then
14 echo "This unit has rsync enabled"
15 echo "but does not have tun0"
16 else
17 echo "No tun0 but no requirement either."
18 fi
19 fi
20 fi
最佳答案
您期望 Awk 在没有匹配项时将其退出代码设置为 1,但 Awk 默认情况下不会这样做。你需要做类似的事情
awk '{ success ... exit 0 } END { exit 1 }'
显式设置退出代码。
if [[ $(something; echo $?) -eq 0 ]]
也是一大堆反模式。你只是想要
if something
--检查$?
是什么if
做;这就是它的目的。
根据您下面的评论,您显然是指 if grep -i something test.ini | something else
没有 -q
(它会抑制 grep
的任何输出),可以重构为
if awk '/something/ && ... something else' test.ini
除了丢失-i
来自grep
的标志。明显的解决方法是小写输入行(同样小写正则表达式,因为否则你当然不会获得匹配!),但还有其他方法可以使 Awk 进行比较,同时忽略字符大小写。
if awk 'tolower($0) ~ /something/ && ... something else' test.ini
有了这些评论,尝试一下这个重构版本。
#!/bin/bash
if ifconfig | grep -iq tun; then
echo "This unit has tun0"
elif ! awk 'tolower($0) ~ /enabled=yes/ && !/Auto|Purge|AD/{
print $1; fail=1} END { exit fail }' test.ini
then
echo "This unit has file copy enabled"
echo "but does not have tun0"
elif ! awk 'tolower($0) ~ /autosyncenabled=yes/ && !/Exchange/{
print $1; fail=1} END { exit fail }' test.ini
then
echo "This unit has rsync enabled"
echo "but does not have tun0"
else
echo "No tun0 but no requirement either."
fi
您的 Awk 脚本会将输出打印到标准输出;如果不需要,请取出 print
只是exit 0
第一次成功,否则 END { exit 1 }'
,像这样;
:
elif awk 'tolower($0) ~ /enabled=yes/ && !/Auto|Purge|AD/{ exit 0 }
END { exit 1 }' test.ini
then
:
另请注意elif
避免嵌套 if
流得太深了。
关于linux - Bash if 语句,使用来自文件的 grep -eq 0 from $?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629062/