一、if语法结构

1. 单分支结构

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

或者

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

2. 双分支结构

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

3. 多分支结构

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

条件表达式可以是test、[]、[[]]、(())等,也可以直接使用命令作为条件表达式

每个if语句都以if开头,并带有then,最后以fi结尾

多分支每个elif后也要带then,但else后不带then

4. 条件表达式和if语句的变换

符号条件表达式能够转换为if语句,如下

[ -f /etc/passwd ] && echo 1 || echo 0

等同于

if [ -f /etc/passwd ]
then
echo 1
else
echo 0
fi

其他条件表达式类似

二、case语句说明和语法

1. 说明

  • case语句相当于多分枝的if/elif/else条件语句,但看起来更工整,常用于实现系统服务启动脚本等应用中
  • case主要是写服务的启动脚本,适用范围较窄
  • if取值判断、比较,应用面比case更广,几乎所有case语句都可以用if实现

2. 语法

case "变量" in
值1)
指令1...
;;
值2)
指令2...
;;
*)
指令3...
esac

说明:

  • 如果变量的值等于值1时,则执行该值后面的指令1直到遇到;;后停止,然后跳出case语句,执行case语句后面的其他指令
  • 如果没有匹配到任何值,则执行*)后面的指令,该指令通常是提示用户的指令,最后一个值可以省略双分号
  • 表达式值支持管道、正则等多功能匹配

3. 简单实践

根据用户输入判断用户输入的哪个数值,并输出,如果非数值,则提示错误

  • cat /server/scripts/b7.sh
#!/bin/bash
read -p "pls input num[1-9]" num
case "$num" in
1)
echo "the num is 1"
;;
2)
echo "the num is 2"
;;
[3-9])
echo "the num is $num"
;;
*)
echo "pls input num,3q"
esac

执行脚本查看结果:

  • sh /server/scripts/b7.sh

    pls input num[1-9]1

    the num is 1
  • sh /server/scripts/b7.sh

    pls input num[1-9]3

    the num is 3
  • sh /server/scripts/b7.sh

    pls input num[1-9]g

    pls input num,3q

最新文章

  1. IOS 开发教程
  2. WPF快速入门系列(5)——深入解析WPF命令
  3. webStorm快捷键总结
  4. js中关于数据类型的转换
  5. 图形性能(widgets的渲染性能太低,所以推出了QML,走硬件加速)和网络性能(对UPD性能有实测数据支持)
  6. MediaStore
  7. Instll meld in windows
  8. 浅谈Spring事务隔离级别
  9. 基于hadoop的BI架构
  10. 知物由学|游戏开发者如何从容应对Unity手游风险?
  11. Spark学习之数据读取与保存总结(一)
  12. HBase学习——4.HBase过滤器
  13. POJ 3280 Cheapest Palindrome (区间DP) 经典
  14. js对字符串的一些操作方法
  15. 写在vue总结之前(二)
  16. springmvc 结合 自动封装异常信息输出为json 报错 500内部服务器错误的原因
  17. Swagger文档化restful接口
  18. 微信小程序 - 授权页面
  19. Flexvolume
  20. ref:Mysql授权远程登陆

热门文章

  1. u盘重装系统后怎么恢复成普通u盘使用,U盘启动盘还原的方法
  2. lucene入门&amp;Solr
  3. vue过滤出字符串中的汉字,match加正则
  4. data_analysis:初识numpy
  5. 思科数据中心CCIE v3.0考试内容
  6. 苹果ios APP怎么打包?推荐这个网站
  7. What does int main(int argc, char *argv[]) mean?
  8. es实现规格动态域生成
  9. 【当年笔记】集合之Queue队列
  10. websphere+IHS+plugin集群搭建