case语句与select语句
case语句:
多分支if语句:
if CONDITION1;then
分支1
elif CONDITION2;then
分支2
...
else CONDITION;then
分支n
fi
例如下面这段代码,我们可以使用while语句内嵌套if语句实现,
#!/bin/bash
cat << EOF
cpu) display cpu information
mem) display memory information
disk) display disks information
quit) quit
==================================
EOF
read -p "Entwer your option: " option
while [ "$option" != "cpu" -a "$option" != "mem" -a "$option" != "disk" -a "$option" != "quit" ]; do
echo "cpu,mem,disk,quit"
read -p "Entwer your option: " option
done
if [ "$option" == "cpu" ];then
lscpu
elif [ "$option" == "mem" ];then
free -m
elif [ "$option" == "disk" ];then
fdisk -l /dev/[hs]d[a-z]
else
echo "quit"
exit 0
fi
不难看出,语句有些陈杂,下面我们看一下case语句的语法格式,
case语句的语法格式:
case $VARAIBLE in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
分支n
;;
esac
利用case我们将上面的代码修改一下,结果如下:
#!/bin/bash
cat << EOF
cpu) display cpu information
mem) display memory information
disk) display disks information
quit) quit
==================================
EOF
read -p "Entwer your option: " option
while [ "$option" != "cpu" -a "$option" != "mem" -a "$option" != "disk" -a "$option" != "quit" ]; do
echo "cpu,mem,disk,quit"
read -p "Entwer your option: " option
done
case $option in
cpu)
lscpu ;;
men)
free -m ;;
disk)
fdisk -l /dev/[hs]d[a-z] ;;
*)
echo "quit"
exit 0 ;;
esac
是不是比if语句更直观,更有条理性
最后我们在说一下与case类似的select语句
select 循环与菜单
select variable in list
do
循环体命令
done
select循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3提示符,等待用户输入
用户输入菜单列表中的某个数字,执行相应的命令
用户输入被保存在内置变量REPLY中
select是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c退出循环
select 经常和case联合使用
与for循环类似,可以省略 in list ,此时使用位置参量