一、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

循环2-if与case语法的更多相关文章

  1. case语法练习脚本之判断

    case语法练习脚本之判断 #!/bin/bash read -p "请输入一个字符,并按enter键确认:" key case "$key" in [a-z] ...

  2. bash 中的case语法

    CASE语法格式备忘 case $variable-name in pattern1) command1 ... .... commandN ;; pattern2|pattern3|pattern4 ...

  3. Shell case语法结构解析

    case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 ...

  4. Verilog RTL优化策略(一):推荐使用assign语法替代if-else和case语法

    参考 <手把手教你设计CPU--RISC-V处理器篇> 先给出不用if-else和case的原因 Verilog中的if-else和case语法存在两大缺点: 不能传播不定态X: 会产生优 ...

  5. HiSql 实现case语法操作 新一代无实体ORM框架

    HiSql 实现case语法操作 在SqlServer,Oralce,Hana,PostGreSql,MySql 这些数据都支持SQL case语法,平常在实现业务开发中也会常用到,那么HiSql对于 ...

  6. Shell基础(三):使用for循环结构、使用while循环结构、基于case分支编写脚本、使用Shell函数、中断及退出

    一.使用for循环结构 目标: 本案例要求编写一个Shell脚本chkhosts.sh,利用for循环来检测多个主机的存活状态,相关要求及说明如下: 1> 对192.168.4.0/24网段执行 ...

  7. SQL Server高级内容之case语法函数

    1.Case函数的用法  (1)使用类似:switch-case与if-else if. (2)语法: case [字段] when 表达式 then 显示数据 when 表达式 then 显示数据 ...

  8. [lua]尝试一种Case语法糖

    function CaseT(arg) function proxy(caller) caller.yield(r) end -- proxy return function (cond) if (c ...

  9. case语法2

    case流程控制语句在linux中有其独到的一面,使得在编程过程中能够在脚本编写的过程中具备多个选项功能,使其功能多样化,其具备简单,快速的特点. 一.case流程语句结构图 根据流程图可以知道,在所 ...

  10. case语法

    一.文件系统访问列表 FACL :Filesystem Access Control List    文件系统访问列表 利用文件扩展保存额外的访问控制权限. setfacl: -m:设定访问控制权限  ...

随机推荐

  1. vue组件自调用

    组件自调用 在vue中有些情况下我们会用到组件本身来遍历出自己想要的效果. 其实非常简单,可以在模板中使用name属性值,来调用自己 <template> <el-submenu v ...

  2. windows10默认的EDGE浏览器进行切换窗口的操作修改

    Windows 10 修改 Alt+Tab 键 切换 新版 Microsoft Edge 单个标签页/窗口 解决方案:在 Windows 设置 的搜索框中 搜索 alt,选择 选择按下 Alt+Tab ...

  3. HCIP-ICT实战进阶08-以太网链路的聚合和集群

    HCIP-ICT实战进阶08-以太网链路的聚合和集群 1 网络可靠性需求 网络可靠性可以从设备.链路多个层面实现, 保持当前设备或链路出现单点或者多点故障时保证网络服务不间断的能力. 网络可靠性 设备 ...

  4. 【坑】 centos 7.6 使用ssh 秘钥登录遇到的问题

    问题: 我在master1上面创建了一个ssh的秘钥文件,通过ssh-copy-id 传送四台主机,然后使用ansible all -m ping 发现有台机器就是有问题 这是怎么回事???一样的配置 ...

  5. nextLine和hasNextLine的区别

    == 重点:如果要判断一个文件这一行是否还有可读数据不能通过nextLine != null 来判断,要用hasNextLine是否为真来判断. == 1.nextLine: 公共字符串nextLin ...

  6. 解决Fiddler设置的代理总是被自动关闭,The system proxy was changed

    火绒剑过滤路径ProxyOverride 停用服务SangforSP https://www.cnblogs.com/jspider/p/15896503.html

  7. mariadb 集群 重启的几种情形

    最近项目中遇到过一次mariadb集群中三台节点有两台挂掉的情况.总结了一下mariadb集群可能遇到的几种情况需要重启. 环境说明: mariadb集群ip: 10.0.101.51 10.0.10 ...

  8. OM6621P系列国产M4F内核低功耗BLE5.1 SoC蓝牙芯片

    随着5G与物联网时代到来,智慧城市.电动出行.智能家居.可穿戴设备等应用高速发展,低功耗蓝牙技术在近几年智能化浪潮中的地位也尤为重要.OM6621P系列的开发即是为解决国内低功耗蓝牙应用设计需求,其主 ...

  9. h5打包exe,uniapp打包桌面应用exe,mac,electron方式

    1.配置镜像 因为下载慢,所以.(网速快的可以跳过这步) 右键我的电脑-属性-高级系统设置-高级-环境变量-新建 变量名: ELECTRON_MIRROR 变量值: https://cdn.npm.t ...

  10. 处理GET和POST的中文乱码问题

    一.doGet 1.先获取iso的错误字符串 2.回退.重编(用UTF-8) String name = request.getParameter("username"); byt ...