我已经创建了一个脚本来更新iptables中的一些ipaddress。我正在描述我面临的问题。
的问题:
1)这里比较两个变量字符串:
BASE=172.31.0.0
CMD=172.31.1.0
if [[ "$CMD" == "$BASE" ]]; then
echo "ip are same"
else
echo "not matched"
fi
但执行上述脚本时没有响应/输出。这里没有比较没有发生。亲切地建议一个解决这个问题的最佳解决方案。
2)执行脚本后我需要重启iptables:
BASE=172.31.0.0
CMD=172.31.1.0
if [[ "$CMD" == "$BASE" ]]; then
echo "ip are same"
else
echo "not matched"
fi
service iptables restart
iptables -nvL
脚本应显示最后两行(命令)的输出。请建议我最好的解决方案以及如何以最佳方式执行此操作。
答案 0 :(得分:1)
这很奇怪。这个应该可以工作,所以如果它不起作用,你就忘了提到一些重要的东西。
这个脚本是如何执行的?你只需输入./script,还是由某些服务(如cron)执行?
以下是一些调试建议:
完整性检查:看看bash是否有效(也许你的登录shell不是bash,所以你没有注意到)。在终端运行:
/bin/bash -c 'echo hello world'
打印你好世界吧?怎么样:
/bin/bash -c 'BASE=172.31.0.0; CMD=172.31.1.0; if [[ "$CMD" == "$BASE" ]]; then echo "ip are same"; else echo "not matched"; fi'
如果上述任何一项无效,则说明您的bash安装存在问题。
不要使用./script.sh执行脚本,而是像这样运行:
/bin/bash script.sh
没有什么?运行这个:
file script.sh
如果它以“使用CRLF行终止符”结束,则cdarke将其钉住:该文件是在Windows上使用不正确的工具创建的。在Linux上重新创建它或使用dos2unix。但无论如何,我怀疑它,因为有一个CRLF结束文件,我得到这个打印:
bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory
而不是一无所获。
将这一行放在文件的开头:
set -x
(#!/ bin / bash 下方,如果有的话)。这样可以确保打印调试跟踪,显示每个命令的执行情况。
如果仍然没有显示任何内容..将其放在您的脚本中(如果您将其放在设置-x 下方):
touch /tmp/hi-this-is-strange
然后在运行脚本后检查是否有 / tmp / hi-this-strange-strong 文件。