Shell 判断语句:决策的艺术

简介: 了解Shell脚本的选择结构,包括if和case语句,对于编写条件执行的脚本至关重要。if语句基于条件执行命令,基本格式为`if condition; then statements; fi`,可扩展为if-else或多if-elif-else结构。例如,根据输入的整数输出对应的星期。case语句更灵活,匹配特定值或模式,如`case $var in pattern) commands;; esac`,支持正则表达式。两者都用于条件分支,适用于不同场景。

编写 Shell 脚本时,了解如何根据不同条件执行不同的命令是至关重要的。本文旨在以简单易懂的语言,介绍 Shell 脚本中的选择结构——if 语句和 case in 语句,帮助初学者和有经验的开发者深入理解。

if 语句

if 语句用于基于条件的执行。在 shell 中,if 语句的基础语法如下:

#!/bin/bash

if condition
then
  statement(s)
fi

在实际应用中,我们通常会遇到需要直接在 if 语句后紧接着写 then 的情况。这时,应该使用分号分隔,否则会导致语法错误。如下所示:

#!/bin/bash

# 分号是必须的,否则会出现语法错误
if condition; then
  statement(s)
fi

if else 语句

当 if 语句的条件不满足时,else 部分的代码将会被执行:

#!/bin/bash

if condition
then
   statement1
else
   statement2
fi

if elif else 语句

对于多条件判断,可以使用 if, elif, else 结构来实现:

#!/bin/bash

if condition1
then
   statement1
elif condition2
then
    statement2
elif condition3
then
    statement3
# 可以有更多的 elif 分支
else
   statementn
fi

举一个例子,输入一个整数,输出该整数对应的星期几的英文表示:

#!/bin/bash

printf "Input integer number: "
read num

if ((num==1)); then
    echo "Monday"
elif ((num==2)); then
    echo "Tuesday"
elif ((num==3)); then
    echo "Wednesday"
elif ((num==4)); then
    echo "Thursday"
elif ((num==5)); then
    echo "Friday"
elif ((num==6)); then
    echo "Saturday"
elif ((num==7)); then
    echo "Sunday"
else
    echo "error"
fi

# Input integer number: 5
# Friday

case in 语句

case in 语句是一种更为灵活的条件分支语句,它能够匹配具体的值或者模式。基本语法如下:

#!/bin/bash

printf "Input integer number: "
read num

case $num in
  1)
    echo 'Monday'
  ;;
  2)
    echo 'Tuesday'
  ;;
  3)
    echo 'Wednesday'
  ;;
  4)
    echo 'Thursday'
  ;;
  5)
    echo 'Friday'
  ;;
  6)
    echo 'Saturday'
  ;;
  7)
    echo 'Sunday'
  ;;
  *)
    echo 'error'
esac

case in 支持的简单正则表达式

  • * 表示任意字符串。
  • [abc] 表示 a、b、c 三个字符中的任意一个。比如,[15ZH] 表示 1、5、Z、H 四个字符中的任意一个。
  • [m-n] 表示从 m 到 n 的任意一个字符。比如,[0-9] 表示任意一个数字,[0-9a-zA-Z] 表示字母或数字。
  • | 表示多重选择,类似逻辑运算中的或运算。比如,abc | xyz 表示匹配字符串 "abc" 或者 "xyz"。

一个实际例子如下:

#!/bin/bash

printf 'Input a character: '
read char

case $char in
  [abc])
    echo 'abc 中任意一个'
  ;;
  [0-9])
    echo '数字'
  ;;
  abc|xyz)
    echo '不是 abc 就是 xyz'
  ;;
  [,.?!])
    echo '特殊符号'
  ;;
  *)
    echo '其他'
esac

选择结构是脚本编程中不可或缺的部分,它让我们能够根据不同的条件执行不同的代码。Shell 提供的 if 语句和 case 语句各有千秋,可以根据实际需要选择使用。

通过上面的示例,你应该对 Shell 脚本中的判断语句有了基本的了解。无论你是刚开始学习编程,还是已经有一定的经验,希望本文能帮助你更好地理解和使用 Shell 脚本中的条件判断功能。

相关文章
|
3月前
|
Shell
Shell基础知识(三)——流程判断
Shell基础知识(三)——流程判断
39 3
|
5月前
|
Shell UED Python
Shell 循环语句:重复任务的自动化利器
在Shell脚本中,循环语句如`while`和`for`是自动化任务的关键。`while`循环在条件满足时执行,例如计算1到100的和;`for-in`循环遍历列表,可用于迭代指定数值或命令输出,如求1到100的和。`select-in`循环提供交互式菜单,增强脚本用户体验。理解并运用这些循环能提升脚本效率和可读性。现在,动手试试吧!
53 2
|
5月前
|
存储 Shell 开发者
Shell 数组:灵活操作的秘诀
**Shell 数组简介**:作为基础数据结构,数组在Shell编程中不可或缺。它们存储多个值,下标从0开始。创建如`array=(值1 值2...)`,访问用`${array[index]}`。增删改查及获取长度、拼接数组都有相应语法,例如`unset array[index]`删除元素,`${#array[@]}`获取长度。通过实践这些操作,提升Shell脚本技能。
43 0
|
6月前
|
Shell
shell 学习(四)【if语法 for循环控制】
shell 学习(四)【if语法 for循环控制】
42 0
|
存储 Shell 数据处理
shell脚本里的数据思维
shell脚本里的数据思维
64 1
|
机器学习/深度学习 存储 人工智能
【网安AIGC专题11.8】论文15 ChatGPT在软件工程中的全面作用:程序语法(AST生成、表达式匹配) 静态行为、动态分析(数据依赖和污点分析、指针分析) 提示设计(角色提示、指令提示)
【网安AIGC专题11.8】论文15 ChatGPT在软件工程中的全面作用:程序语法(AST生成、表达式匹配) 静态行为、动态分析(数据依赖和污点分析、指针分析) 提示设计(角色提示、指令提示)
117 0
|
Shell Linux Go
《Linux操作系统编程》第八章 Shell程序设计: shell 语言结构,包括测试、分支、循环、跳转、函数、语句组
《Linux操作系统编程》第八章 Shell程序设计: shell 语言结构,包括测试、分支、循环、跳转、函数、语句组
117 0
|
运维 Shell 应用服务中间件
【运维知识高级篇】超详细的Shell编程讲解3(if判断+Shell菜单+case流程判断+批量创建删除用户+猜数字小游戏)
【运维知识高级篇】超详细的Shell编程讲解3(if判断+Shell菜单+case流程判断+批量创建删除用户+猜数字小游戏)
171 1
|
Web App开发 网络协议 Unix
Linux-文本处理三剑客awk详解+企业真实案例(变量、正则、条件判断、循环、数组、分析日志)
文本处理 awk 1.awk简介 awk是一种编程语言,用于在Linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其他命令的输出,它支持用户自定义函数和动态正则正则表达式等先进功能,是Linux/unix下的一个强大的编程工具。它在命令行中使用,但更多是作为脚本来使用。
511 0
Linux-文本处理三剑客awk详解+企业真实案例(变量、正则、条件判断、循环、数组、分析日志)
|
Shell
shell脚本编程小技巧(2)——如何解决多行重定,变量不被shell解释
参考资料 https://blog.csdn.net/ccwwff/article/details/48519119 例子 原理 ![]
778 0