bash shell学习日记(5)特殊字符(四)之星号与问号
目录
1.星号
1.1在bash shell脚本中用途
2、问号
2.1在bash shell脚本中用途
2.2 通过脚本分析
3、思维导图呈现总结
一、星号
1.1在bash shell脚本中用途
1)当作文件通配符,含义匹配指定文件下的任意文件名,注意 :* 不能匹配以点开头的文件/目录。
2)正则表达式,含义匹配 * 前的字符任意次数,包括0次
3)乘法(*)或幂(**)运算符
二、问号
2.1在bash shell脚本中用途
1)当作文件名通配符,匹配单个字符。
2)正则表达式,匹配? 前面字符的1次或2次,通常用来匹配单个字符。
3)测试操作符
- 在双圆括号结构表达式中,用来测试一个条件的结果(三元操作符 三个条件if-then-else)
补充:双元括号结构 ((...))
a.于let命令很相似,允许算术扩展和赋值
如下实例:
a=$((5+3))
echo $a
8
b.在bash中,使用C语言风格变量操作的一种处理机制
例如:
(( a= 23)) # 变量赋值,“=”两边允许有空值
(( a++ )) #后置自加
(( a-- )) #后置自减
(( ++a )) #前置自加
(( --a )) #前置自减 }
EX:使用三元操作符好处对比
(( var0 = var1<98?9:21)) var这个变量如果小于98那就把9赋值给var0,否者就是21
等价于下列脚本
1 if [ "$var0" -lt 98 ] 2 then 3 var1=9 4 else 5 var1=21 6 fi
注意:-lt<=> less then 小于
- 在参数替换表达式中,用来测试一个变量是否被设置
什么是参数替代?
处理或扩展普通的变量
参数替代方法:$ {} 参数替代 parameter substitution,如果变量未被声明或赋值,那么就输出错误信息(错误信息是可以指定的)。
实现方法:1) $ {parameter?err_msg} 判断变量是否声名 2) $ {parameter:?err_msg} 判断变量是否声名以及是否赋值
EX:参数替代方法${} 两种实现方法对比
EX(1)正常进行变量定义赋值
var1=123 echo $var1 123 echo ${var1} 123
EX(2)变量未定义
echo ${var2} echo ${var2?err_msg} #错误信息指定的是err_msg -bash: var2: err_msg cho ${var2:?err_msg} -bash: var2: err_msg
EX (3) 仅定义变量,未赋值
var3= echo ${var3} 空值 echo ${var3:?ll} -bash: var3: ll
2.2 脚本分析
1 #!/bin/bash 2 #使用参数替换和错误信息 3 #例1:检查一些系统环境变量,这是一个预防性保护的好习惯 4 # 例如:如果$USER没有被设置,系统将无法识别你 5 : ${HOSTNAME?} ${USER?} ${HOME?} ${MALL} 6 #向NULL命令传递四个测试 7 echo 8 echo "Name of then machine is $HOSTNAME" 9 echo "You are "$USER"" 10 echo "Your home directory is $HOME" 11 echo "Your mail INBOX is located in $MALL" 12 echo 13 echo "If you are reading this messags" 14 echo "critical environmental vatiables have benn set" 15 echo 16 echo 17 #例2:#[variable?] 结构也能检查脚本中变量的设置情况 18 ThisVariable=Value-of-ThisVariable 19 : "Variable of ThisVaiable is $ThisVariable" 20 echo 21 echo 22 : ${SF?"SF ha not been set."} 23 #如果SF没有被设置的话,那么这个脚本会打印一个错误消息,然后退出 24 #你可以自己指定错误消息 25 # : ${variablenaem?"ERROR MESSAGE"} 26 #和上面的测试方法一样于下面的效果相同 27 # dummy_variable=${sxz} 28 # dummy_variable=${sxz?"sxz has not been set."} 29 # echo ${sxz} > /dev/null 30 #bash的设置值 set -u 可以强制检查变量是否被设置的方法 31 echo "You will not sess this message,because script already terminated." 32 33 HERE=0 34 exit $HERE不会在这里面退出 35 #事实上,这个脚本将会返回值1作为退出状态($echo $?)
分析:默认情况下bash是检查variable是否被使用
例如:
echo $ll
echo $cc
这个是不报错的
set -u 打开bash检查variable是否使用
echo $cc
-bash: cc: 为绑定变量
set +u 关闭
echo $c
三、以思维导图的方式总结


浙公网安备 33010602011771号