一、shell脚本

1、判断返回值

chmod a+x test.sh
if [ $? -eq 0 ];then
     echo success
else
     echo fail
fi

shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败。 -eq是等于

二、powershell脚本

1、判断返回值


if($?){
   echo success
}else{
   echo fail
}

powershell跟shell使用同样的判断,但是powershell是通过 $true $false 的布尔值来判断的,成功是true,失败是false,所以不需要跟0 1做比较。可直接引用

三、bat脚本

1、单语句判断后跳转下一句

net user admin /add  && (goto succeed) || echo failed

PS:语句分三部分,第一句是执行一个命令语句,如果执行通过,也就是返回的是0,没有报错,则执行&&后面的语句,否则执行||后面的语句。 && 表示成功,|| 表示失败,后面的语句可以加括号,也可以不加。

2、通过%errorlevel%判断

net user admin /add
if %errorlevel% == 0 (
  echo success
) else (
  echo fail
)

PS: %errorlevel%判断上一个语句执行的返回值,其中0是成功,1是失败。实际上,errorlevel 返回值可以在0~255 之间,除了0,其他每个数值都有特殊的含义。 额外提醒,在for循环中或if语句中多条命令都需要获取返回值等情况下,用errorlevel显得无效,第二条命令开始errorlevel的值都不会变。此处涉及批处理中的变量延迟问题,并不是errorlevel无效,而是对errorlevel变量的引用采用的是没开启变量延迟情况下的百分号%。 在循环和if多语句中,需要开启变量延迟的设置:setlocal EnableDelayedExpansion,即延迟环境变量扩展,告诉解释器在遇到复合语句的时候,不要将其作为一条语句同时处理,而是一条一条地去解释。但是这时如果仍然用百分号%来引用变量是不起作用的,必须用感叹号!,如!errorlevel!

setlocal EnableDelayedExpansion
net user admin /add
if !errorlevel! == 0 (
  echo success
) else (
  echo fail
)