shell脚本if语法、shell脚本if多分支结构

一、if语法

1.1、if单分支结构

语法结构:

if <条件表达式>
    then
        指令
fi

或者

# 注意:在shell中,then和if是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开。

if <条件表达式>;then
  指令
fi

if单分支嵌套语句:

if <条件表达式>
  then
    if <条件表达式>
      then
    fi
fi

注意:在shell中,then和fi是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开。

说明:<条件表达式> 可以是test、[]、[[]]、(())等条件表达式,每一个if条件语句都是以if开头,并带有then,最后以fi结尾

条件表达式可参考:《shell脚本中test、[]、[[]]、(())的区别

示例

[root@shell]# cat if.sh 
#!/bin/bash

if [ -f /etc/hosts ]
    then
      echo "[test1]"
fi

if [[ -f /etc/hosts ]];then
    echo "[[test2]]"
fi

if test -f /etc/hosts
    then
      echo "test3"
fi
#说明:上面都是判断/etc/hosts是否是文件并是否存在,如果是文件并且存在就打印相关的命令
# -f :判断后面的是否是个文件

执行效果:

[root@shell]# sh if.sh 
[test1]
[[test2]]
test3

1.2、双分支结构:加一个else否则

#if单分支结构主体是:如果…那么…。而双分支结构就是:如果…那么…否则

#语法结构

if <条件表达式>
    then
        命令集1
    else
        命令集2
fi

示例

[root@shell]# cat if1.sh 
#!/bin/bash

if [ -f /etc/hosts ]
    then
      echo "is file"
    else
      echo "no file"
fi

#执行效果

[root@shell]# sh if1.sh 
is file

1.3、多分支结构

语法结构:

if <条件表达式1>
    then
        指令集1
    elif <条件表达式2>
        then
            指令集2
    elif <条件表达式3> 
        then
            指令集3     
    else
        指令集4
fi

或者

#多分支结构
if <条件表达式1>;then
     指令集1
elif <条件表达式2>;then
     指令集2
elif <条件表达式3>;then
     指令集3
else
      指令集4
fi

提示:如果加elif,那么就要加then,每个elif都要带有then,最后结尾的else后面没有then

示例:

[root@shell scripts]# cat if2.sh 
#!/bin/bash

if [ $1 -eq 1 ]
    then
      echo "input 1 success"
    elif [ $1 -eq 2 ]
      then
          echo "input 2 success "
    elif [ $1 -eq 3 ]
      then
          echo "input 3 success"
    else
      echo "input failure"
fi

说明:如果传入的第一个参数为1就输出相关命令,或者有如果传入的第一个参数为2,就输出相关命令,后面同理,最后是否则又输出什么

执行效果:

[root@shell]# sh if2.sh 1
input 1 success
[root@shell]# sh if2.sh 2
input 2 success 
[root@shell]# sh if2.sh 3
input 3 success
[root@shell]# sh if2.sh 4
input failure

if使用注意项:

  • [ ]表示条件测试。注意这里的空格很重要。要注意在’[‘后面和’]'前面都必须要有空格
  • 在shell中,if和then是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开。
  • 注意if判断中对于变量的处理,需要加引号,以免一些不必要的错误。没有加双引号会在一些含空格等的字符串变量判断的时候产生错误。比如[ -n “$var” ]如果var为空会出错
  • 判断是不支持浮点值的
  • 如果只单独使用>或者<号,系统会认为是输出或者输入重定向,虽然结果显示正确,但是其实是错误的,因此要对这些符号进行转意
  • 在默认中,运行if语句中的命令所产生的错误信息仍然出现在脚本的输出结果中
  • 使用-z或者-n来检查长度的时候,没有定义的变量也为0
  • 空变量和没有初始化的变量可能会对shell脚本测试产生灾难性的影响,因此在不确定变量的内容的时候,在测试号前使用-n或者-z测试一下
  • ? 变量包含了之前执行命令的退出状态(最近完成的前台进程)(可以用于检测退出状态)





更多if使用案例参考:shell脚本中的if语句、shell脚本中的if条件语句介绍和使用案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值