假如有多个既定的变量内容,例如sh09.sh当中,所需要的变量就是“hello”及空字符两个,那么这时只要针对这两个变量来设置情况就可以了。这时使用case...in...esac最为方便。
case $变量名称in <==关键字为case,变量前有 $ 符
"第一个变量内容") <==每个变量内容建议用双引号括起来,关键字则为小括号 )
程序段
;; <==每个类别结尾使用两个连续的分号来处理
"第二个变量内容")
程序段
;;
) <==最后一个变量内容都会用 来代表所有其他值
不包含第一个变量内容与第二个变量内容的其他程序运行段
exit 1
;;
esac <==最终的case结尾!思考一下case反过来写是什么
将sh09.sh的案例进行修改:
[root@Server01 scripts]# vim sh09-2.sh
!/bin/bash
Program:
Show "Hello" from $1.... by using case .... esac
History:
2021/08/29 Bobby First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
case $1 in
"hello")
echo "Hello, how are you ?"
;;
"")
echo "You MUST input parameters, ex> {$0 someword}"
;;
*) # 其实就相当于通配符,0~无穷多个任意字符之意
echo "Usage $0 {hello}"
;;
esac
将sh09.sh的案例进行修改:
[root@Server01 scripts]# vim sh09-2.sh
!/bin/bash
Program:
Show "Hello" from $1.... by using case .... esac
运行结果:
[root@Server01 scripts]# sh sh09-2.sh
You MUST input parameters, ex> {sh09-2.sh someword}
[root@Server01 scripts]# sh sh09-2.sh smile
Usage sh09-2.sh {hello}
[root@Server01 scripts]# sh sh09-2.sh hello
Hello, how are you ?
sh09-2.sh的案例当中,如果输入“sh sh09-2.sh smile”来运行,那么屏幕上就会出现“Usage sh09-2.sh {hello}”的字样,告诉用户仅能够使用hello。这样的方式对于需要某些固定字符作为变量内容来执行的程序就显得更加方便。
一般来说,使用“case 变量in”时,当中的那个“$变量”一般有以下两种取得方式。
直接执行式:例如上面提到的,利用“script.sh variable”的方式来直接给 $1这个变量内容,这也是在/etc/init.d目录下大多数程序的设计方式。
互动式:通过read这个命令来让用户输入变量的内容。
说明:让用户能够输入one、two、three,并且将用户的变量显示到屏幕上,如果不是one、two、three,就告诉用户仅有这3种选择。