2014-08-30 76 views
0

我是新来的shell脚本,我有一个节目主题的一些行我只是不明白,退出这些四行:如何在Shell脚本中使用其他语言?

current=$(wget -q -O - http://checkip.dyndns.org|sed s/[^0-9.]//g) 
[ "$current" != "$registered" ] && { 
wget -q -O /dev/null $UPDATEURL echo "DNS updated on:"; date 
} 

我对这些行的问题是:

1“ -O“和”-q“选项

a-on line one,如果没有指定任何输出文件,-O的含义是什么。

b - 通过在第三行使用“-O/dev/null”,是否希望将其存储在/ dev/null上,为什么?它通过使用“-q”来禁止输出,我不明白它的意义。

2 - 最后三行是比较“[]”中的两个变量,然后如果它成功则开始“{}”,我怎么能把“其他”放在里面?

+0

'-q' --->在终端上关闭wget输出,'-O' --->将输出保存到文件!你的第二个路径是/ dev/null ---输出写在这里! – 2014-08-30 17:57:49

回答

0

1.

一)根据wget的手册页,-O -将输出文件下载到终端。在这里,使用-O -后,您将管道输出到sed命令。

b)-q禁用wget输出到终端状态和全部,但-O自己输出下载的数据。通过做-O /dev/null你告诉我,我不希望这个下载的数据存储在任何地方,也不希望显示在终端上。可能这个命令是用来更新服务器上的某个值的。它并不关心服务器的输出。

2. 如果您使用bash作为shell,这很常见。您可以按照以下格式编写if-then-else。

if [ "$current" != "$registered" ] 
then 
    wget -q -O /dev/null $UPDATEURL echo "DNS updated on:"; date 
else 
    echo "Something else" 
fi 

您使用的语法不是if-then-else语法。它只是一种常用的技术,就像是 - 那么或者如果没有那么工作。

+0

你可以做'cmd && then-part || else-part'提供'then-part'总是返回零(成功)。 – tripleee 2014-08-30 18:55:34

+0

是的。但是,这是一个不太可靠的假设。我绝不会这样认为。 – nisargjhaveri 2014-08-30 19:02:58

+0

很容易确定。'[“$ foo”==“$ bar”] && {make love;真正; } ||使战争' – tripleee 2014-08-30 19:06:39

0

好吧,如果你是shell脚本新手,让我先解释'man'命令。 'man'代表Manual。所以'man wget'会给你wget的手册页。

手册上说:

-O - will redirect all output to stdout, (so sed can have a go at removing 
     anything that is not your IP) 

-q  will 'quiet' all other output 

对于如果然后其他部分,你将有如果你想在其他的任何部分重写代码。 if-then-else的确切格式很大程度上取决于你的shell例如bash!= ksh!= zsh!= csh!= tcsh。

但是,我不认为你想在这种情况下。当您的程序与当前检测到的IP地址不同时,您的程序可能会更新您的注册IP地址。但如果它是一样的,你不需要更新任何东西。

输出到/ dev/null的wget只会调用更新url,所以服务器可能会对某些东西。