if 语句 和 case 语句

if 语句 和 case 语句

1 if 语句

1.1 条件测试

先设定一个条件,判断条件是否满足,执行一段特定的代码。

不满足,执行不满足的代码。

通过 $? 的返回码来判断条件为真还是为假( true 或 false )

条件测试的格式:

1.1.1 test表达式
test 表达式

	-e 判断文件(目录)是否存在

	-d 判断是否是目录

	-f 判断是否是文件

	-r 判断当前用户是否有读权限

	-w 判断当前用户是否有写权限

	-x 判断当前用户是否有执行权限
整数比较选项符号
等于-eq== (比较数字和字符串)
不等于-ne!= (比较数字和字符串)
大于-gt>
小于-lt<
小于等于-le<=
大于等于-ge>=
1.1.2 [ ] 和 [[ ]]

[ ][[ ]] 是bash自带的。

逻辑测试:

且(-a、&&):表达式中的所有条件都必须成立

或(-o、||):只要表达式中有一个条件成立即可

[[ ]]:双中括号的功能更强大,适用于复杂的表达式,可以避免歧义。

[ ]:功能比较适用于简单的条件判断。

1.2 单分支结构

#单分支格式#

if [  判断条件  ]
then 
  代码
else
  代码
fi

1.3 多分支结构

#多分支格式#

if [  判断条件  ]
then 
  代码
elif [   ] # 可以无限elif 
then
  代码
else # 以上条件都为假
  代码
fi
# if 和 fi要对应

1.4 嵌套结构

# if 语句嵌套格式

if [  判断条件  ]
then
  if [  判断条件  ]
  then
    代码
  else
    代码
  fi
else
  代码
fi

2 case 语句

#基本结构#
case 变量名 in
    值1)
        # 匹配值1时执行的代码块
        ;;
    值2)
        # 匹配值2时执行的代码块
        ;;
    值3)
        # 匹配值3时执行的代码块
        ;;
    *)
        # 不匹配任何值时执行的代码块,类似于default语句
        ;;
esac

case支持通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符

3 练习

3.1 检查文件是否存在

检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

if [ -e ~/test.sh ]    
then
  echo "test.sh存在"
  if [ -x ~/test.sh ]
  then
    echo "可以执行"
  else
    echo "没有执行权限"
  fi
else
  echo "test.sh不存在"
fi

3.2 整数分组

提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误。

read -p "请输入100米赛跑的秒数:" a            
if [[ "$a" -gt 0 && "$a" -le 10 ]] &> /dev/null
then
  echo "恭喜您进入选拔赛!"
  read -p "请输入性别:" b
  if [ "$b" ==]
  then
    echo "进入男生组"
  elif [ "$b" ==]
  then
    echo "进入女生组"
  else
    echo "性别输入错误"
  fi
elif [ "$a" -gt 10 ] &> /dev/null
  then
  echo "抱歉,您已被淘汰"
else
  echo "请重新输入"
fi

3.3 用 case语句解压不同后缀名压缩包

用 case 语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录

tar -zxvf

tar -jxvf

read -p "请输入压缩包文件名:" a
case $a in
*.tar.gz)
  tar -zxvf $a -C /opt
  ;;
*.tar.bz2)
  tar -jxvf $a -C /opt
  ;;
*)
  echo "压缩包文件后缀名不正确"
esac

3.4 整数奇偶判断

提示用户输入内容,使用 if 语句判断输入的内容是否为整数。判断范围0-100。再判断输入的内容是奇数还是偶数。

read -p "请输入内容:" a                          
if [ "$a" -eq "$a" ] &> /dev/null
then
  if [[ "$a" -ge 0 && "$a" -le 100 ]] &> /dev/null
  then
    if [[ $(($a%2)) -eq 1 ]]
    then
      echo $a"是整数,且为奇数"
    else
      echo $a"是整数,且为偶数"
    fi
  else
    echo $a"超出范围,提示0~100"
  fi
else
  echo $a"不是整数"
fi

3.5 if 语句 判断主机是否存活

用 if 语句判断主机是否存活,保存到/opt/hosts.txt
ping -c 5 不显示ping的过程

read -p "请输入主机IP地址:" a
ping -c 5 $a &> /dev/dull
if [ $? = 0 ]
then
  echo "主机存活"
  echo $a >> /opt/hosts.txt
else
  echo "主机不存在"
fi

3.6 case 语句控制nginx服务

用 case 语句控制 systemctl start|stop|restart|status 来管理nginx服务,
要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}

apt -y install nginx &> /dev/null
read -p "请输入命令选项:" a
case $a in
start)
  systemctl start nginx
  ;;
stop)
  systemctl stop nginx
  ;;
restart)
  systemctl restart nginx
  ;;
status)
  systemctl status nginx
  ;;
*)
  echo "命令选项输入不正确"
esac
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值