美文网首页js css html
if [ $? -eq 0 ];then 是什么意思?

if [ $? -eq 0 ];then 是什么意思?

作者: Gakki0725 | 来源:发表于2023-01-06 23:38 被阅读0次
    作者:Gakki

    问题描述

    if [ $? -eq 0 ];then是什么意思?
    
    • 在 shell 脚本中,表示 $? 代表上一个命令执行后的退出状态;
    • -eq:表示等于;
    • 语句if [ $? -eq 0 ]表示 shell 传递到脚本的参数等于0,则执行 then 中的语句。

    Linux的命令执行退出状态

    • 在 Linux 系统中,每当命令执行完成后,系统都会返回一个退出状态。退出状态用于检查命令执行的结果(成功/失败),退出状态是一个数字。
    • 若退出状态值为 0,表示命令运行成功;而退出状态值不为 0 时,则表示命令运行失败。最后一次执行的命令的退出状态值被保存在内置变量$?中,所以可以通过 echo 语句进行测试命令是否运行成功。
    • POSIX 规定了以下几种退出状态和退出状态的含义。
    状态值 含义
    0 表示运行成功,程序执行未遇到任何问题
    1-125 表示运行失败,脚本命令、系统命令错误或参数传递错误
    126 找到了该命令但无法执行
    127 未找到要运行的命令
    >128 命令被系统强行结束
    • 举例说明:
      • 如我们输入:cd /root,然后再输入:echo $?,结果为0,表示最后一次执行的命令运行成功。
      • 我们切换到一个不存在的目录:cd test,提示文件/目录不存在。输入:echo $?看看状态如何,结果为1,表示最后一次执行的命令运行失败
    • 输入命令:yahah,提示命令不存在。输入:echo $?看看状态如何,结果为127,表示未找到要运行的命令
      Linux的命令执行退出状态

    其他

    $0:shell或shell脚本的名字
    $*:以一对双引号给出参数列表
    $@:将各个参数分别加双引号返回
    $#:参数的个数
    $_:代表上一个命令的最后一个参数
    $$:代表所在命令的PID
    $!:代表最后执行的后台命令的PID
    $?:代表上一个命令执行后的退出状态
    

    shell 比较

    数值比较
    -eq:表示等于,如:if [ $var1 -eq 100 ]
    -ne:表示不等于,如:if [ $var1 -ne 100 ]
    -gt:表示大于,如:if [ $var1 -gt 100 ]
    -ge:表示大于等于,如:if [ $var1 -ge 100 ]
    -lt:表示小于,如:if [ $var1 -lt 100 ]
    -le:表示小于等于,如:if [ $var1 -le 100 ]
    
    字符串比较(也可用于数值比较)
    ==:表示相等,如:if [  $var1 == $var2 ]
    !=:表示不相等,如: if [  $var1 != $var2 ]
    =~:表示前边变量包含后边变量则为真,如:if [[  $var1 =~ $var2 ]]
    注:本质上=~是正则匹配单层中括号不支持正则需要双层中括号
    
    字符串测试运算
    -z 字符串:表示字符串的长度为零,如:if [ -z $var1 ]
    -n 字符串:表示字符串的长度不为零,如:if [ -n $var1 ]
    
    文件测试运算
    -e 文件名:表示如果文件存在则为真,如:if [ -e $var1 ]
    -r 文件名:表示如果文件存在且可读则为真,如:if [ -r $var1 ]
    -w 文件名:表示如果文件存在且可写则为真,如:if [ -z $var1 ]
    -x 文件名:表示如果文件存在且可执行则为真,如:if [ -x $var1 ]
    -s 文件名:表示如果文件存在且至少有一个字符则为真,如:if [ -s $var1 ]
    -d 文件名:表示如果文件存在且为目录则为真,如:if [ -d $var1 ]
    -f 文件名:表示如果文件存在且为普通文件则为真,如:if [ -f $var1 ]
    -c 文件名:表示如果文件存在且为字符型特殊文件则为真,如:if [ -c $var1 ]
    -b 文件名:表示如果文件存在且为块特殊文件则为真,如:if [ -b $var1 ]
    
    逻辑运算(与/或/非)
    -a或者&&:与运算,如:if [ $var1 == '' -a $var2 != '' ] 或 if [ $var1 == '' ] && [ $var2 != '' ]
    -o或者||:或运算,如:if [ $var1 == '' -o $var2 != '' ]或if [ $var1 == '' ] || [ $var2 != '' ]
    !:非运算,如:if ! [ $var1 == '' ]或if [ ! $var1 == '' ]
    

    相关文章

      网友评论

        本文标题:if [ $? -eq 0 ];then 是什么意思?

        本文链接:https://www.haomeiwen.com/subject/rwlecdtx.html