shell读书笔记5

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值