模式匹配
- *:由零个或多个字符组成的任何字符串
- ?:任何一个字符
- [abc...]:匹配方括号中任何一个字符
- [!abc...]:不匹配括号中的任何一个字符
- [^abc...]:不匹配括号中的任何一个字符
- [[:alpha:]]:任何字母字符
- [[:lower:]]:任何小写字母字符
- [[:upper:]]:任何大写字母字符
- [[:alnum:]]:任何字母字符或数字
- [[:punct:]]:除了空格和字母数字以外的任何可打印的数字
- [[:digit:]]:从0到9的任何单个数字
- [[:space:]]:任何一个空白字符。这可能包括制表符、换行符、回车符、换页符或空格
案例
[user@serverb glob]$ ls a*
able alfa
[user@serverb glob]$ ls *a*
able alfa baker bravo cast charlie delta easy
[user@serverb glob]$ ls [ac]*
able alfa cast charlie
[user@serverb glob]$ ls ???
dog
[user@serverb glob]$ ls ?????
baker bravo delta
波形符扩展
- 波形符可匹配当前用户的主目录。如果开始时使用斜杠意外的字符串,shell就会将该斜杠之前的字符串译为用户名;如果存在匹配项,则用该用户的主目录绝对路径来替换此此字符串,如果找不到匹配的用户名,则使用实际波形符加上该字符串代替
案例
[user@serverb glob]$ ls ~user
ak glob tmp
[user@serverb glob]$ ls ~/glob/
able alfa baker bravo cast charlie delta dog easy echo
[user@serverb glob]$ echo ~/glob/
/home/user/glob/
大括号扩展
大括号扩展用于生成任意字符串。大括号包含字符串的逗号分隔列表或顺序表达式。结果包含大括号定义之前或之后的文本。大括号扩展可以相互嵌套。此外,双句点,双句点语法(..)可以扩展成一个序列,使得{a..d}扩展成a b c d
案例
[user@serverb ~]$ echo {sun,mon,tue,wed,thu,fri,sta}.log
sun.log mon.log tue.log wed.log thu.log fri.log sta.log
[user@serverb ~]$ echo file{1..3}.txt
file1.txt file2.txt file3.txt
[user@serverb ~]$ echo file{a..d}.txt
filea.txt fileb.txt filec.txt filed.txt
[user@serverb ~]$ echo file{a,b}{1,2}.txt
filea1.txt filea2.txt fileb1.txt fileb2.txt
[user@serverb ~]$ echo file{a{1,2},b,c,d}.txt
filea1.txt filea2.txt fileb.txt filec.txt filed.txt
#大括号扩展实际用途就是快速创建多个文件或目录
[user@serverb ~]$ mkdir glob/rhel{1..3}
[user@serverb ~]$ ls glob/rhel*
glob/rhel1:
glob/rhel2:
glob/rhel3:
变量扩展
变量的作用类似于可以在内存中存储值的命名容器,通过变量,可以从命令行或在shell脚本内轻松访问和修改
[user@serverb ~]$ VARIABLENAME=value
[user@serverb ~]$ USERNAME=operator
[user@serverb ~]$ echo $VARIABLENAME
value
#为了避免因其它扩展引起的错误,可以将变量用{}括起来
[user@serverb ~]$ echo ${USERNAME}
operator
命令替换
- 命令替换允许命令的输出替换命令行上的命令本身。当命令括在括号中并且前面有((命令)形式可以嵌套多个命令扩展。
- 旧的形式是用反引号:
命令
;这种方式不能嵌套
[user@serverb ~]$ echo today is $(date +%A)
today is Wednesday
[user@serverb ~]$ echo the time is $(date +%M) minutes past $(date +%l%p)
the time is 55 minutes past 9PM
防止参数被扩展
- 在bash shell中,许多字符有特殊意义。为了防止shell在命令行的某些部分上执行shell扩展,您可以为字符和字符串加上引号或执行转义
- 反斜杠()是转义字符。它可以防止紧随其后的字符被扩展
[user@serverb ~]$ echo the value of $HOME is your home dir
the value of /home/user is your home dir
[user@serverb ~]$ echo the value of \$HOME is your home dir
the value of $HOME is your home dir
- 如果为了防止较长的字符被扩展可以使用单引号和双引号。
-- 单引号可以组织所有shell扩展
-- 双引号可以阻止大部分shell扩展
[user@serverb ~]$ echo 'the value of $HOME is your home dir'
the value of $HOME is your home dir
[user@serverb ~]$ echo "the value of $HOME is your home dir"
the value of /home/user is your home dir