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