2013-02-13 1116 views
1

我已经创建了一个脚本来更新iptables中的一些ipaddress。因此我正在描述我正面临的问题。shell脚本比较两个变量

问题:

  1. 比较脚本
  2. 中的两个变量之间没有发生在脚本我需要执行一个命令即结束;服务重启/停止等,并且在执行脚本时这些命令的输出应该是可见的。

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 

的脚本应显示的最后两行(命令)的输出。请告诉我最好的解决方案,以及如何以最好的方式做到这一点。

+2

本文发表奖项。祝你好运 – 2013-02-13 12:35:33

+4

所以......你正在使用什么外壳? bash,还是sh?你知道他们不同,对吧?因为这样,该脚本在bash中工作并在sh中产生错误。这两者都不是你正在报告的内容。 – ghoti 2013-02-13 12:45:16

+0

感谢您的回复,我正在使用bash脚本,并试图通过./script.sh来执行此脚本。 – suboss87 2013-02-13 14:37:56

回答

1

这很奇怪。这应该工作,所以如果它不工作,你忘了提及一些重要的东西。

该脚本是如何执行的?你只是输入./script或者是由一些服务(如cron)执行?

下面是一些建议调试:

  1. 健全检查:看是否bash的工作(也许你的登录shell是不是bash的,所以你没注意到)。在终端运行:

    /bin/bash -c 'echo hello world' 
    
  2. 它打印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安装问题。

  3. 而是与./script.sh执行你的脚本中,这样运行:

    /bin/bash script.sh 
    
  4. 什么都没有?运行这个:如果它的东西,如结束

    file script.sh 
    

    “与CRLF行结束符”,然后cdarke钉它:该文件在Windows上创建了一个带有不恰当的工具。在Linux上重新创建它或使用dos2unix。但无论如何,我对此表示怀疑,因为以CRLF结束的文件,我得到这个印刷:

    bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 
    

    ,而不是什么都没有。

  5. 把那些该行上的文件的开头:

    set -x 
    

    (!下面#/斌/庆典,如果你有的话)。这可以确保打印出一条调试跟踪信息,并显示每条命令执行的情况。

  6. 如果仍然显示没有什么..把这个在你的脚本(以下集-x如果你把它):

    touch /tmp/hi-this-is-strange 
    

    然后检查是否有的/ tmp/HI-这是你运行脚本后奇怪的文件。

+0

感谢您的及时回复...您可以让我知道如何删除“。”在IP地址...例如)172.31.0.0然后通过awk我需要得到输出为1723100如何通过使用“awk”工具来做到这一点..在此先感谢。 – suboss87 2013-02-14 06:21:29

+0

我觉得sed更适合这个任务:'echo 172.31.0.0 | sed's /\.// g'' – darque 2013-02-15 01:35:52

+0

@ user1565390我的回复中有哪些内容有用?我仍然不明白你的问题是什么(并且可以随意编辑你的问题以添加更多信息),但是如果我的回答解决了问题,请接受它。 – darque 2013-02-15 05:12:54