shell脚本中如何设置exit值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本中如何设置exit值相关的知识,希望对你有一定的参考价值。
我在父脚本中调用子脚本,想根据子脚本中exit的值来判断执行的状态,但是父脚本中收到exit值只有0和去,不知道是否可以在子脚本中设置不同的exit值,然后父脚本来获取这些值,从而达到判断状态的目的
父脚本现在收到子脚本的返回值,只有0和1
exit [返回值]
其中,返回值的取值范围为0~255,因为UNIX/POSIX中是用一个无符号8比特数值来表示exit返回码的。你若写exit -1,它会给你转为255。追问
如果我写exit 3出来还是为1
追答tx,这是不可能的。应该就是3。
请确认子脚本确实是通过 exit 3返回而不是通过其他exit返回的。
或者,简单的,子脚本里就写一句 exit 3,然后调用子脚本后紧接着就用 echo $? 来查看。
如果你的不行,请将你的代码贴上来看看。
我获取了一下传过来的值,的确是对应exit后面的值,但是我一开始在判断时候,是用if语句里面直接用$1判断,然后就会有问题
追答$1 ?
$? 吧
ret=$?
if [ $ret -ne 0 ]; then
echo $ret
fi
$?只能用于取相邻的上一条语句的返回值,中间隔了其他语句就不灵了。
所以,如果后面还要用的话,最好用一个变量先将$?的值保持下来。
追问
笔误,是$?,
if [ $? -eq 1];then...elif [ $? -eq 2 ];then....,就是类似这样的判断,但是除了1和2能行,其他不行,但是我直接将$?赋值,是可以得到对应值
已经说了呀,$?只能用于取相邻的上一条语句的返回值,中间隔了其他语句就不灵了。
if [ $? -eq 1];then...elif [ $? -eq 2 ];then....
当执行到 elif [ $? -eq 2 ];then 这句时,表明前面一句if [ $? -eq 1];then已经执行过了并且不满足条件,此时 $?代表的是 if [ $? -eq 1];then 这句的返回值而不是子脚本的返回值。这是你想要的结果吗?
对的,我知道
参考技术A 可以在exit时自定义退出代码比如exit 255exit break和continue
exit语句
exit [返回值]
如果在 exit 之后定义了返回值,那么这个脚本执行之后的返回值就是我们自己定义的返回值。可以通过查询 $? 这个变量来査看返回值。如果 exit 之后没有定义返回值,则脚本执行之后的返回值是执行 exit 语句之前最后执行的一条命令的返回值。写一个 exit 语句的例子:
[[email protected] ~]#vi sh/exit.sh #!/bin/bash #演示exit的作用 read -p "Please input a number:" -t 30 num #接收用户的输入,并把输入赋予变量num y=$(echo $num|sed‘s/[0-9]//g‘) #如果变量num的值是数字,则把num的值替换为空;否则不替换 #把替换之后的值赋予变量y [-n "$y" ] && echo "Error! Please input a number!" && exit 18 #判断变量y的值,如果不为空,则输出报错信息,退出脚本,退出返回值为18 echo The number is: $num" #如果没有退出脚本,则打印变量num中的数字
如果输入的不是数字,"[-n"$y"]&&echo"Error! Please input a number!"&&exit 18"这条命令就会执行,exit 一旦执行,脚本就会中止。
break语句
当程序执行到 break 语句时,会结束整个当前循环。
[[email protected] ~]# vi sh/break.sh #!/bin/bash #演示break眺出循环 for ((i=1;i<=10;i=i+1)) #循环10次 do if ["$i" -eq 4] #如果变量 i 的值等于4 then break #则退出整个循环 fi echo $i #输出变量i的值 done
continue语句
continue 语句只会退出单次当前循环,并不会影响后续的循环。