如何在Shell脚本中使用else?
我不熟悉shell脚本,我对程序中的某一行主题不太了解,请退出以下四行:如何在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”选项 在第一行,如果没有指定任何输出
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”]&&&{做爱;真实;}| |让战争足够公平。非常感谢。