Shell编程 if语句的嵌套结构 多条件判断语句case

case语句语法

case 变量名 in
  值1) 
   指令1 
  ;; 
  值2) 
   指令2 
  ;; 
  值3) 
   指令3 
  ;; 
   *)
    默认
esac
  • case语句会将该变量的值与每个值相比较,如果与某个值相等,则执行该value所对应的一组语句。当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。如果没有任何一个值与variable的值相匹配,则执行*后面的一组语句。

ANSI转义序列

ANSI转义序列是一种特殊的字符序列,用于在终端中进行文本样式和颜色的控制。这些序列以\e[开头,并以字母和分号组成。最常见的用途是在终端中设置文本颜色、背景颜色、文本样式(如粗体、斜体等)以及移动光标的位置。下面是一些常用的ANSI转义序列示例:

设置文本颜色:

  • \e[30m:黑色
  • \e[31m:红色
  • \e[32m:绿色
  • \e[33m:黄色
  • \e[34m:蓝色
  • \e[35m:洋红色
  • \e[36m:青色
  • \e[37m:白色

设置背景颜色:

  • \e[40m:黑色背景
  • \e[41m:红色背景
  • \e[42m:绿色背景
  • \e[43m:黄色背景
  • \e[44m:蓝色背景
  • \e[45m:洋红色背景
  • \e[46m:青色背景
  • \e[47m:白色背景

设置文本样式:

  • \e[1m:粗体
  • \e[2m:淡色(可能被忽略)
  • \e[3m:斜体
  • \e[4m:下划线
  • \e[5m:闪烁
  • \e[7m:反显(颠倒前景色和背景色)
  • \e[8m:隐藏(不可见)

重置所有样式和颜色:

  • \e[0m

通过将这些ANSI转义序列插入到输出的字符串中,可以实现在终端中动态更改文本样式和颜色。请注意,ANSI转义序列在不同的终端程序和操作系统中可能会有差异,所以在编写脚本时请考虑跨平台兼容性。

题目

1:执行shell脚本,打印一个如下的水果菜单:
1.apple
2.pear
3.banana
4.cherry 当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色(随意),要求用case语句实现。

完整代码:

#!/bin/bash

# 随机颜色数组
COLORS=("31" "32" "33" "34" "35" "36")  # 对应字体颜色的ANSI码
BG_COLORS=("41" "42" "43" "44" "45" "46")  # 对应背景颜色的ANSI码

while true; do
  # 打印水果菜单
  echo "1. apple"
  echo "2. pear"
  echo "3. banana"
  echo "4. cherry"
  echo "0. 退出"

  # 读取用户输入
  read -p "请选择一个水果(输入对应的数字,输入0退出):" choice

  # 检查用户选择
  case $choice in
    1)
      echo -e "您选择的水果是:\e[${BG_COLORS[$(($RANDOM % ${#BG_COLORS[@]}))]}m\e[${COLORS[$(($RANDOM % ${#COLORS[@]}))]}m apple\e[0m"
      ;;
    2)
      echo -e "您选择的水果是:\e[${BG_COLORS[$(($RANDOM % ${#BG_COLORS[@]}))]}m\e[${COLORS[$(($RANDOM % ${#COLORS[@]}))]}m pear\e[0m"
      ;;
    3)
      echo -e "您选择的水果是:\e[${BG_COLORS[$(($RANDOM % ${#BG_COLORS[@]}))]}m\e[${COLORS[$(($RANDOM % ${#COLORS[@]}))]}m banana\e[0m"
      ;;
    4)
      echo -e "您选择的水果是:\e[${BG_COLORS[$(($RANDOM % ${#BG_COLORS[@]}))]}m\e[${COLORS[$(($RANDOM % ${#COLORS[@]}))]}m cherry\e[0m"
      ;;
    0)
      echo "退出程序"
      break
      ;;
    *)
      echo "无效的选择"
      ;;
  esac
done

测试

在这里插入图片描述

if语句

if单分支结构

#第一种语法:
if <条件表达式>
then
    指令
fi
#第二种语法:
if <条件表达式>;then
    指令
fi

if双分支结构

#语法:
if <条件表达式>
then
    指令序列1
else
    指令序列2
fi

if多分支结构

#语法:
if 条件表达式1
then
    命令序列1
elif 条件表达式2
then
    命令序列2
elif 条件表达式3
then
    命令序列3
else
    命令序列n
fi

在上面的语法中,当整个if
elif语句结构中的第1个条件表达式为真,则执行第1个then子句中的语句statement1;否则,继续下面的判断。如果条件表达式2的值为真,则执行第2个then子句中的语句,以此类推。如果所有的条件表达式的值都为假,则执行最后的else子句中的语句。最后是if
elif结构的结束标志fi。

题目

if嵌套:输入两个整数比较大小

完整代码

#!/bin/bash

# 读取两个整数
read -p "请输入第一个整数:" num1
read -p "请输入第二个整数:" num2

# 验证输入是否为整数
re='^[0-9]+$'  # 整数的正则表达式

if ! [[ $num1 =~ $re ]]; then
  echo "第一个输入不是整数"
  exit 1
fi

if ! [[ $num2 =~ $re ]]; then
  echo "第二个输入不是整数"
  exit 1
fi

# 比较两个整数的大小
if [ "$num1" -eq "$num2" ]; then
  echo "两个整数相等"
elif [ "$num1" -gt "$num2" ]; then
  echo "$num1 大于 $num2"
else
  echo "$num1 小于 $num2"
fi

测试

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第1章 BashShell命令 6 1.1 Shell提示符 6 1.2 文件与目录Shell命令 7 1.2.1 更改目录命令(cd) 7 1.2.2 列表命令(ls) 7 1.2.3 操作文件命令 10 1.2.4 目录处理命令 14 1.2.5 查看文件内容命令 15 1.3 监控程序 20 1.3.1 进程查看 20 1.3.2 实时进程监控 22 1.3.3 停止进程 24 1.4 监控磁盘空间 25 1.4.1 挂载介质 25 1.4.2 使用df命令 26 1.4.3使用du命令 27 1.5 操作数据文件 28 1.5.1 数据排序(sort) 28 1.5.2 搜索数据 (grep) 30 1.5.3 压缩数据 30 1.5.4 归档数据(tar) 33 1.6 使用Linux环境变量 34 1.6.1 设置环境变量 34 1.6.2 默认的shell环境变量与path变量的设置 37 1.7 Linux文件权限 40 1.7.1 Linux安全性 40 1.7.2 使用Linux用户组 46 1.7.3 解码文件权限 47 1.7.4 修改安全设置 49 1.8 vim编辑器 52 第2章 基本脚本编译 54 2.1 创建脚本与使用变量 54 2.1.1 创建脚本 54 2.1.2 使用变量 55 2.2 重定向输入输出与数学计算 57 2.2.1 输出重定向 57 2.2.2 输入重定向 58 2.2.3 管道 58 2.2.4 数学计算 58 2.3 退出脚本 60 第3章 结构化命令 61 3.1 if语句 61 3.1.1 if-then语句 61 3.1.2 if-then-else语句 61 3.1.3 嵌套if语句 62 3.2 if条件语句 63 3.2.1 数值比较 63 3.2.2字符串比较 64 3.2.3 文件比较 65 3.2.4 复合条件检查 65 3.3 if-then的高级特征与case命令 66 3.3.1 使用双圆括号 66 3.3.2 使用双方括号 67 3.3.3 case命令 67 3.4 for命令 67 3.4.1 读取列表 68 3.4.2 读取变量与读取命令 69 3.4.3 改变字段分隔符与使用通配符读取目录 69 3.4.5 C式的for命令 70 3.5 while、until命令 71 3.5.1 使用多条测试命令 71 3.5.2 until命令与循环嵌套 72 3.6 文件数据的循环与控制循环 73 3.6.1 文件数据的循环 73 3.6.2 break命令 73 3.6.3 continue命令 75 第4章 处理用户输入与显示数据 76 4.1 命令行参数与特殊的参数变量 76 4.1.1 读取参数 76 4.1.2 读取程序名称 77 4.1.3 测试参数 77 4.1.4 参数计数 77 4.1.5 获取所有数据 78 4.2 移位与选项 79 4.2.1 移位 79 4.2.2 找出选项 79 4.2.3 使用getopt命令 81 4.2.4 更高级的getopts命令 83 4.2.4 标准化选项 84 4.3 获取用户输入 84 4.3.1 基本读取 84 4.3.2 计时 85 4.3.3 默读与文件读取 85 4.4 显示数据 86 4.4.1 标准文件描述符 86 4.4.2 重定向错误 87 4.4.3 临时重定向 88 4.4.4永久重定向 88 4.4.5 在脚本中重定向输入 89 4.5 创建自己的重定向 90 4.5.1 创建输出文件描述符 90 4.5.2 重定向文件描述符 90 4.5.3 创建输入文件描述符 91 4.5.4 创建读取/写入文件描述符 91 4.5.5 关闭文件描述符 92 4.5.6列出开发文件描述符 92 4.5.7禁止命令输出 94 4.6 使用临时文件 94 4.6.1 创建本地临时文件 94 4.6.2 在/temp中创建临时文件 95 4.6.3 创建临时目录 96 4.6.4 记录消息 96 第5章 脚本控制 97 5.1 处理信号 97 5.1.1 Linux信号回顾 97 5.1.2 生成信号 97 5.1.3捕获信号 99 5.1.4捕获脚本退出 99 5.1.4移除捕获 100 5.2 以后台模式运行脚本 100 5.3 作业控制 102 5.3.1查看作业 102 5.3.2重新启动停止的作业 103 5.4 nice与renice命令 104 5.4.1 nice命令 104 5.4.2 renice命令 104 5.5 定时运行脚本 105 5.5.1使用at命令调度作业 105 5.5.2使用batch命令调 107 5.5.3 调用定期脚本 107 5.6 从头开始 109 5.6.1在启动时启动脚本 109 5.6.2随新shell一起启动 109 第6章 创建函数 110 6.1 基本脚本函数 110 6.1.1 创建函数 110 6.1.2 使用函数 110 6.2 返回值 111 6.2.1 默认退出状态 111 6.2.2 使用return命令 111 6.2.3 使用函数输出 112 6.3 在函数中使用变量 112 6.3.1 向函数传递参数 112 6.3.2 在函数中处理变量 113 6.4 数组变量与函数 114 6.4.1 向函数传递数组 114 6.4.2从函数返回数组 115 6.5 函数递归与创建库 116 6.5.1函数递归 116 6.5.2 创建库 116 6.6 在命令行中使用函数 117 6.6.1在命令行创建函数 117 6.6.2在.bashrc文件中定义函数 117 6.7 select命令使用 119 第7章 sed、gawk介绍与正则表达式 120 7.1 sed编辑器 120 7.1.1 在命令行中定义编辑器命令 120 7.1.2 在命令行中使用多个编辑器命令 121 7.1.3 从文件读取编辑器命令 121 7.2 gawk程序 122 7.2.1 gawk命令格式 122 7.2.2 自命令行读取程序脚本 122 7.2.3 使用数据字段变量 123 7.2.4 在程序脚本中使用多个命令 124 7.2.5从文件读取程序 124 7.2.6 在处理数据之前运行脚本 125 7.2.7 在处理数据之后运行脚本 125 7.3 sed编辑器基础知识 126 7.3.1 更多替换选项 126 7.3.2 使用地址 127 7.3.3 删除行 128 7.3.4 插入和附加文本 129

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值