特殊字符
shell中除了普通字符外,还有很多具有特殊含义和功能的字符,在使用它们时要特别注意 其含义和作用。
通配符
- 通配符用于模式匹配,常见的通配符有*、?和用[]括起来的字符序列。
- ***:代表任意长度的字符串。例如:a 可以匹配以a开头的任意长度的字符串,但是不包括点号和斜线号。也就是说 a\ 不能匹配abc.txt。
- **?:**用于匹配任一单个字符。
- [] : 代表匹配其中的任意一个字符,比如 [abc] 代表匹配 a 或则 b 或则 c,[]中可以用 “-” 表明起止,
比如 [a-c ]等同于 [abc]。* 和 ? 在 [] 中则变成了普通字符,没有通配的功效。
引号:包括单引号和双引号
- 双引号中的字符除了 “$”、“\”、反引号依然保留其特殊用途外,其余字符都作为普通字符处理。
- 单引号中的字符都作为普通字符处理
注释符
- "#" 代表注释,除了 ”#!“,其表示某个解释器的路径,且必须在整个脚本的第一行。
大括号
- 变量扩展。引用变量,又叫变量扩展,例如变量 VAR,可以使用 ${VAR} 引用。
- 通配符扩展
- 用于匹配多个排列组合的可能。还可以用于匹配不同的文件。
[root@localhost ~]# echo {x1,x2,x3}{y1,y2,y3}
x1y1 x1y2 x1y3 x2y1 x2y2 x2y3 x3y1 x3y2 x3y3
[root@localhost ~]# echo file{1..6}
file1 file2 file3 file4 file5 file6
[root@localhost ~]# echo file{4,8,9}
file4 file8 file9
- 语句块
- 大括号还能用于构造语句块,语句之间使用回车隔开。使用语句块的场景一般是在自定义函数中。
控制字符
- 控制字符即 ctrl+key 组合键一起使用,用于修改终端或文本显示。控制字符是交互式使用 的,不能用于脚本中。
感叹号
- 通常代表逻辑反,例如!=表示不等于
转义和引用
# shell中有很多特殊字符,会有特殊意义,但是有时候会造成麻烦,需要转义才可以使用,转义符号为“\”
[root@sunday-test ~]# echo 8 \* 8 =64
8 * 8 =64
[root@sunday-test ~]# echo \$Dollar
$Dollar
引用
- 是指将字符串用某种符号括起来,以防止特殊字符被解析为其他意思。
- shell中一共有4种引用符,分别为双引号、单引号、反引号和转义符。
- 双引号可以引用除$符号、反引号、转义符之外的所有字符;单引号可以引用所有字符;反引号则会将反引号中的内容解释为系统命令。
[root@sunday-test ~]# echo "current directory is $PWD"
current directory is /rootshell
[root@sunday-test ~]# echo 'current directory is $PWD'
current directory is $PWD
命令替换
- 是指将命令的标准输出作为值赋给某个变量。
# 格式有反引号和$(),建议使用$()
[root@sunday-test ~]# TIME=`date +%F`
[root@sunday-test ~]# echo $TIME
2017-10-28