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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CyberSecure

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

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

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

打赏作者

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

抵扣说明:

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

余额充值