一、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. Mybatisplus-Generator代码生成器-简单示例

    简单示例 import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotatio ...

  2. arm架构安装mysql5.7

    添加mysql用户组和mysql用户,用于隔离mysql进程 groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M ...

  3. 第四章:用Python对用户的评论数据进行情感倾向分析

    文章目录 项目背景 获取数据 情感倾向 senta_bilstm 模型 情感划分 数据描述 数据分析 总体评论倾向 评论分布 各分布的情感倾向 评论分词 去除停用词 绘制词云图 结论 源码地址 本文可 ...

  4. 若依分离版本+Nginx+docker+jenkins 部署

    准备: jenkins node.js 若依前后分离 docker 最终访问地址: 服务端api地址:192.168.66.74:8086 前端页面地址:192.168.66.61:7001 jenk ...

  5. excel、word、PPT中插入PDF文件不显示图标问题

    插入PDF对象,不显示正确的PDF图标 临时解决办法:手动修改对象图标 具体位置,可在C:\Windows\Installer目录下搜索PDFFile_8.ico 尝试如下操作: 手动复制生成C:\W ...

  6. 网络-7 IPv6(下)

    Ipv6实验 一.华为 思科与华为在接口启用ipv6 思科会自动产生local地址 华为不会自动产生local地址 以太网接口有mac地址,所以肯定是有eui64 serial接口是没有mac地址,他 ...

  7. ROS-安装与开发速记

    参考教程: B站视频(感谢赵老师):https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=14&spm_id_from=pageDriver 课程文件:h ...

  8. 关于 map 的迭代器

    今天遇到一个问题 CountCompileResult(const LIST_MAP & rfLmCompileWafers) {        for (auto itr = rfLmCom ...

  9. Unity 获取后缀名

    for(int i = 0;i < files.Length;i++) { if(files[i].Name.EndsWith(".meta")) { continue; } ...

  10. wpf 查找指定类型的子元素

    public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) where T : Framewo ...