加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – ksh中两种检查返回值的样式

发布时间:2020-12-15 22:07:21 所属栏目:安全 来源:网络整理
导读:在ksh shell中,我想在运行命令后检查返回值,我写了两个样式: if [ $? -ne 0 ] ; then echo "failed!" exit 1else exit 0fi[ $? -ne 0 ] echo "failed!" exit 1 它们是等价的吗?如果没有,如果我想把它写成一行,我该怎么办? 解决方法 它们很接近,但不一样.
在ksh shell中,我想在运行命令后检查返回值,我写了两个样式:

if [ $? -ne 0 ] ; then
    echo "failed!"
    exit 1
else
    exit 0
fi


[ $? -ne 0 ] && echo "failed!" && exit 1

它们是等价的吗?如果没有,如果我想把它写成一行,我该怎么办?

解决方法

它们很接近,但不一样.首先,即使由于某种原因回声失败,if也将执行退出1;链式表达不会.此外,链接版本缺少等于else退出0.

一个更好的等价物是这样的:

[ $? -ne 0 ] && { echo "failed!"; exit 1; } || exit 0

这是标记的ksh,因此您可能会发现数字表达式语法更清晰:

(( $? )) && { echo "failed!"; exit 1; } || exit 0

但如果您愿意,也可以在一行写一个if:

if (( $? )); then echo "failed!"; exit 1; else exit 0; fi

如果您刚刚在此表达式上方运行的命令为了设置$?很简单,您可能只想直接使用它作为if表达式 – 使用reverse子句,因为退出代码0为真:

if grep -q "pattern" /some/filename; then exit 0; else echo "failed!"; exit 1; fi

这个简单的情况并不重要,但总的来说你可能想避免回声.相反,使用printf – 或者如果你不介意只使用ksh,你可以使用print. echo的问题在于它没有提供一种处理变量中奇怪字符串的方法:

$x=-n
$echo "$x"
$

虽然printf和print都有:

$printf '%sn' "$x"
-n
$print - "$x"
-n

再说一遍,这里不是问题,或者你只是打印出一个文字字符串,但我发现完全训练自己摆脱回声习惯更容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读