Unix shell脚本:退出并返回值

时间:2016-06-20 11:55:43

标签: shell unix

我有以下unix shell脚本,其中我有两个整数 变量即a和b。

如果a大于或等于b,则shell脚本应退出并返回0

否则它应退出并返回1

我的尝试:

脚本:ConditionTest.sh

#!/bin/sh

a=10
b=20

if [ $a -ge $b ]
then
        exit 0
else
        exit 1
fi
    ....
    ....
    ....

运行脚本

$ ./ConditionTest.sh
$ 

注意:执行文件后我没有收到任何返回值。

3 个答案:

答案 0 :(得分:3)

shell将最后一个命令的退出状态放在变量?中。 你可以简单地检查它:

mycommand
echo $?

...或者您可以根据其价值使用它来做其他事情:

mycommand && echo "ok" || echo "failed"

或者,更具可读性:

if mycommand; then
  # exit with 0
  echo "ok"
else
  # exit with non-zero
  echo "failed"
if

答案 1 :(得分:3)

你的脚本看起来很好;你做的一切都很正确。

#!/bin/sh

a=10
b=20

if [ $a -ge $b ]
then
        exit 0
else
        exit 1
fi

所以我们在这里运行它并检查返回值:

$ sh test.sh
$ echo $?
1
$

10不大于或等于20.

测试它的另一种方法是这样的:

$ sh test.sh && echo "succeeded" || echo "failed"
failed

如评论中所述,您还应该引用您的变量:

if [ $a -ge $b ]

应该是:

if [ "$a" -ge "$b" ]

答案 2 :(得分:0)

要添加到之前的答案,您应该了解的关键想法是每个程序在退出时都会提供一个数字。该数字用作报告命令是否已成功完成其操作的方法,如果没有,则表示发生了什么类型的错误。

如上所述,可以使用$?访问最后执行的命令的退出代码。

您的脚本没有打印的原因是您的脚本返回1,但是不打印命令的退出代码。 (这类似于调用函数,你从函数中得到一个返回值,但它没有打印出来)