\回车, | 续行符 | \ | 跳脱符,将元字符还原成一般字符 |
>,>> | 输出重定向 | <,<< | 输入重定向 |
! | 调用历史记录; | ! | 逻辑运算中的not |
/ | 路径分割符 | | | 两个命令之间的管道 |
; | 分割执行多个命令 | $ | 置换,引用: |
# | 批注,常用在脚本中 | ~ | 家目录 |
& | 将命令置为后台工作 |
|
|
一.转义字符=跳脱符=逃逸字符——\
反斜线是使后续的字符恢复原来作为单纯字符的用途,换言之,这是要除去特殊字符的作用。下表的每一个字符都是bash的特殊字符。要显示这些字符本身,必须在其前面加上跳脱符。
\’ | \” | \* | \? | \\ | \/ |
\# | \$ | \< | \> | \& | \| |
\[ | \] | \; | \! | \( | \) |
\~ | \` | \{ | \} |
|
|
二.通配符元字符——万用字符
1.?一定有一个字符‘.’,不可为空,但不匹配‘.’打头的 #ls test?.dat #ls –la ??? |
2.*代表0或多个字符‘.’,可以是空字符串,‘.’打头的除外 *zip*——文件名中含zip z*e——头是z并且尾是e ls???——ls打头长度为5 /*/*.conf——某个下一级目录中的.conf |
3.连字符“-”仅在方括号内有效,而*和?只在方括号外面是通配符 [a-dm]? 以a.b.c.d.m开头且后面只跟一个字符的文件的名称 -a[*?]abc *和?均为普通字符,它匹配的字符串只能是-a*abc和-a?abc。 |
三.三种引号
echo Jack\`s book;echo “Jack\`s book”;echo ‘Jack\`s book’
1.‘’单引号逐个地取一串字符,不具有变量置换功能 #echo ‘echo $UID’ echo $UID mkdir ’a b’ |
2.“”双引号内容作字串允许变量置换 #echo “echo $UID” echo 0 |
3.``引用命令的结果,两反引号间为优先执行的命令 #echo `echo $UID` 0 |
四.三种括号的基用法
命令替换行=命令行扩展=bash在解释命令前替换某些元字符,在操作上,用 $( ) 或 ` `"个人"比较喜欢用 $( ) ,理由是:
` ` 很容易与 ' ' ( 单引号)搞混乱。 |
在多层次的复合替换中,` ` 须要额外的跳脱( \` )处理,而 $( ) 则比较直观。 |
1.():将command group置于nested sub-shell去执行
$(ls /) | //命令替换 |
$((9**2)) | //算术扩展 |
$var ,$(var) | //Shell和环境变量 |
2.[]:任一字符
[]内任一字符 | [a-z] [A-Z] [0-9] [a-Za-z0-9]* [wxy] |
匹配列表外任意一个字符 | [!abc]* [^abc]* |
A1 b1 c1 ab1 ac1 ba1 bc1 #ls [^ab]*只显示c1 #rm [abc]*以上都会被删除 #cp -r /etc/sysconfig /bak/etc-$[$(date %Y%m%d) -1] |
3.{}:枚举,字串集合,每个都分别匹配; 在中间为区块的组合
echo s{ab,cd}y——saby scdy |
/bin/z{[ef]gre,cm}p——/bin/zegrep /bin/zfgrep /bin/zcmp |
ls /etc/*{conf,cf,org} |
ls /etc/profile{,.bak} |
ls /etc/sources.list{,.bak} |
mkdir –p /root/tmp/{dir1,dir2,dir3}/{a,b,c} |
echo {1,2,3,4,5,5,6,7,8,9}\*{1,2,3,4,5,5,6,7,8,9} |