-
shell中置换:文件名置换,变量置换,命令置换,算式置换
-
文件名置换:使用*, ?, [characters], !
如:ls abc* 列出以abc开头的文件或目录
ls ch0?.doc 列出ch0X.doc形式文件名,X为单个字符
如果shell不能发现任何文件名可以匹配包含一个?元字符的表达式,shell就会把?看作文件名中的字符,因为大多数文件名不会包括?字符,所以就会产生一个错误消息:no such file or directory
ls ch0[0123456789].doc ch00.doc到ch09.doc都会列出来
ls [a-z]* 列出所有以小写字母开头的文件名
ls [!a]* 列出所有不以字母a开头的文件名 -
-
变量置换:
a="hello"
echo $a 输出hello,变量置换的形式之一
在某些时刻我们经常需要判断某个变量是否存在,若变量存在则使用既有的设置,若变量不存在则给予一个常用的设置。(1)变量未被设置或者内容为空,则替换为新的内容.new_var=${old_var-content}范例一:测试一下是否存在 username 这个发量,若不存在则给予 username 内容为 root[root@www ~]# echo $username<==由于出现空白,所以 username 可能不存在,也可能是空字符串[root@www ~]# username=${username-root}[root@www ~]# echo $usernameroot <==因为 username 没有设定,所以给予为 root的内容。[root@www ~]# username="vbird tsai"[root@www ~]# username=${username-root}[root@www ~]# echo $usernamevbird tsai <==因为 username 已经设定了,所以使用旧有癿设定而不以 root取代上面的范例中,若username已经设定为空串的话,则不会替换,如果要想它进行次替换就可以用加上“:”,即# username=${username:-root}[html]范例二:若 username 未设定或者为空字符串,则将 username 内容设定为 root[root@www ~]# username=""[root@www ~]# username=${username-root}[root@www ~]# echo $username<==因为 username 被设定为空字符串了!所以当然还是保留为空字符串![root@www ~]# username=${username:-root}[root@www ~]# echo $usernameroot <==加上『 : 』后若发量内容为空或者是未设定,都能够以后面癿内容替换。(2)"-"是不影响旧的内容,若想要替换新的内容则用“=”[html][root@www ~]# unset str; var=${str=newvar}[root@www ~]# echo var="$var", str="$str"var=newvar, str=newvar <==因为 str 不存在,所以 var/str 均为 newvar测试:如果 str 已存在了,测试一下 var 会发怎样?[root@www ~]# str="oldvar"; var=${str=newvar}[root@www ~]# echo var="$var", str="$str"var=oldvar, str=oldvar <==因为str存在,所以var等于str的内容(3)如果我想知道,如果旧发量不存在时,整个测试就告知我『有错诨』,此时就能够使用问号[html][root@www ~]# unset str; var=${str?无此变量}-bash: str: 无此发量 <==因为 str 不存在,所以输出错误讯息(4)总结
命令置换:
`command` 使用反引号,而不是单引号,在此机制下,shell执行命令集合,然后将命令的输出结果置换,如将一个命令的输出赋值给一个变量:
DATE=`date`
USERS=`who | wc -l `
也可以使用命令置换来为其他的命令提供参数,如:
grep `id -un` /etc/passwd `id -un`输出当前用户的用户名
算式置换:
其能使你用shell完成简单的整数运算
用法:$((exp)) exp是一个数学表达式,运算符:/,*,-,+,()
如果exp的计算结果不算一个整数,则exp的值会被截去小数部分
echo $((5/2))输出2
在圆括号的第一个和最后一个位置上不应该有任何空格出现,如:
$(( exp) ), $( (exp))均为错误用法
ref: http://www.2cto.com/os/201305/214950.html linux私房菜P 316