0
点赞
收藏
分享

微信扫一扫

shell读书笔记5

扬帆远航_df7c 2022-02-17 阅读 34

9、if-then 的高级特性
bash shell提供了两项可在if-then语句中使用的高级特性:
 A、用于数学表达式的双括号
 B、用于高级字符串处理功能的双方括号

9.1、使用双括号
	双括号命令允许你在比较过程中使用高级数学表达式。test命令只能在比较中使用简单的
	算术操作。双括号命令提供了更多的数学符号,这些符号对于用过其他编程语言的程序员而言并不陌生。
	双括号命令的格式如下:
	(( expression ))
	expression可以是任意的数学赋值或比较表达式
	
	val++ 后增
	val-- 后减
	++val 先增
	--val 先减
	! 逻辑求反
	~ 位求反
	** 幂运算
	<< 左位移
	>> 右位移
	& 位布尔和
	| 位布尔或
	&& 逻辑和
	|| 逻辑或
	
9.2、使用双方括号
	双方括号命令提供了针对字符串比较的高级特性。
	双方括号命令的格式如下:
	[[ expression ]]
	双方括号里的expression使用了test命令中采用的标准字符串比较。
	但它提供了test命令未提供的另一个特性——模式匹配(pattern matching)
	
	在模式匹配中,可以定义一个正则表达式(将在第20章中详细讨论)来匹配字符串值。
	$ cat test24.sh
	#!/bin/bash
	# using pattern matching
	#
	if [[ $USER == r* ]]
	then
	echo "Hello $USER"
	else
	echo "Sorry, I do not know you"
	fi
	$
	$ ./test24.sh
	Hello rich
	$
	在上面的脚本中,我们使用了双等号(==)。双等号将右边的字符串(r*)视为一个模式,
	并应用模式匹配规则。双方括号命令$USER环境变量进行匹配,看它是否以字母r开头。如果是
	的话,比较通过,shell会执行then部分的命令

10、case 命令
有了case命令,就不需要再写出所有的elif语句来不停地检查同一个变量的值了。
case命令会采用列表格式来检查单个变量的多个值。
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac

case命令会将指定的变量与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行
为该模式指定的命令。可以通过竖线操作符在一行中分隔出多个模式模式。星号会捕获所有与已
知模式不匹配的值
$ cat test26.sh
#!/bin/bash
# using the case command
#
case $USER in
rich | barbara)
echo "Welcome, $USER"
echo "Please enjoy your visit";;
testing)
echo "Special testing account";;
jessica)
echo "Do not forget to log off when you're done";;
*)
echo "Sorry, you are not allowed here";;
esac
$
$ ./test26.sh
Welcome, rich
Please enjoy your visit
$
举报

相关推荐

0 条评论