Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Shell脚本中使用else?_Shell - Fatal编程技术网

如何在Shell脚本中使用else?

如何在Shell脚本中使用else?,shell,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”选项 在第一行,如果没有指定任何输出

我不熟悉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”选项

在第一行,如果没有指定任何输出文件,-O的含义是什么

通过在第三行使用“-O/dev/null”,是否希望在/dev/null上保存输出,为什么?顺便说一下,它是用“-q”禁用输出的。我不明白它的意义


2-在最后三行,比较“[]”中的两个变量,如果成功,则启动“{}”,我如何在其中添加“else”?

如果您不熟悉shell脚本,让我先解释一下“man”命令“人”代表手工。因此,“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部分,如果您需要else部分中的任何内容,则必须重写代码。 if-then-else的确切格式在很大程度上取决于您的shell,例如bash!=ksh!=zsh!=csh!=tcsh

然而,我认为在这种情况下你不希望这样。当您的程序与当前检测到的IP地址不同时,它可能会更新您的注册IP地址。但如果是相同的,则不需要更新任何内容

输出为/dev/null的wget将只调用更新url,因此服务器可能会调用某些内容。

1

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

b)
-q
禁用wget输出到类似终端的状态和所有,但-O输出下载的数据本身。通过执行
-O/dev/null
您告诉我,我不希望下载的数据存储在任何地方,也不希望在终端上显示。这个命令的作用可能是更新服务器上的某些值。它不关心服务器提供的输出

二,。 如果在shell中使用
bash
,这是非常常见的。您可以按以下格式编写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语法。这只是一种常用的技术,它的工作原理与当时的情况类似。

-q
-->关闭终端上的wget输出,
-O
-->用于将输出保存到文件!您的第二条路径是/dev/null——输出写在这里!您可以执行
cmd&&then part | | else part
操作,前提是
then part
始终返回零(成功)。是的。但是,这是一个不太可靠的假设。我决不会这么想。这很容易确定<代码>[“$foo”==“$bar”]&&&{做爱;真实;}| |让战争足够公平。非常感谢。