1、管道符:
管道“|”可将命令的结果输出给另一个命令作为输入之用:
cat *.dat|grep 2018 //(显示dat文件里的信息,在dat文件里显示条件带有2018的信息)
2、连接符号: “;”
连续执行多个命令,放在一行执行,中间用“;”分开
mkdir myfile;mv myfile /data1/conf (创建myfile目录,把myfile目录移动到data1/conf路径下)
3、后台执行: “&”
用户有时候执行命令要花很长时间,可能会影响做其他事情。最好的方法是将它放在后台执行。后台运行的程序在用户注销后系统还可以继续执行。当要把命令放在后台执行时,在命令的后面加上“&”
4、斜线: /
在路径表示中代表目录
cd /data1/conf/
单一的/,代表root根目录
在运算中,代表除法
a=10/2
5、反斜线: \
放在指令前,有取消 aliases的作用;放在特殊符号前,该特殊符号的作用消失,;放在指令的最末端,表示指令连接下一行。
$cat data2
the cost is $4.00
$sed -n '/ \ $ /p'data2
the cost is $4.00
6、井号: #
#:管理员
$:普通用户
脚本中的:#号是注释
如果被用在指令中,或者引号双引号括住的话,或者在倒斜线的后面,那他就变成一般符号,不具上述的特殊功能。
7、点: .(dot)
. 代表当前目录
.. 代表上层目录
如果在档案名称前有 . ,需要ls -a 才会显示
特殊字符点号用来匹配除换行符之外的任意单个字符。它必须匹配一个字符,如果在点号字符的位置没有字符,那么模式就不成立
cat data2
this is a test of a line .
the cat is sleeping .
that is a vey nice hat .
this test is at line four .
at ten o'clock we'll go home .
$sed -n '/.at/p' data2
the cat is sleeping .
that is a vey nice hat .
this test is at line four .
匹配了第二行,第三行,第四行,因为匹配的是at,第四行的空格也是字符,因此at前面的空格刚好匹配了该模式,第五行,at放在首行就不能匹配该模式
8、逗号: ,
在运算中当做区隔的用途
a=5+3,b=3+2
9、惊叹号: !
代表反逻辑的作用,!= :代表不等于
ls a[!0-9]
显示除了a0、a1.......a9的其他文件
10、问号: ?
问号表明前面的字符可以出现0次或1次,不包含null字元
ls da?ta
11、星号: *
常用的符号,在文件名扩展上,用来代表任何字元,包含null字元
# ls a*a a1 access_log
在运算时。它代表“乘法”
let “aa=2*3”
除了内建指令let,还有一个关于运算的指令expr,星号在这里也担任“乘法”的角色,不过在使用上,它的前面必须加上escape字元
12、锚字符:(^)
这个符号在正则表达式中,代表行的“开头”位置,在[]中也与“!”(叹号)一样表示“非”
13、连续分号:(;;)
专用在case的选项,担任Terminator的角色
case "$fop" inhelp) echo "Usage: Command -help -version filename";;version) echo "version 0.1" ;;esac
14、'string'单引号
被单引号用括号括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,被视为一般符号处理,防止任何变量替换
heyyou=homeecho '$heyyou' # we get $heyyou
15、"string"双引号
被双引号括住的内容,将被视为单一字串,防止通配符扩展,但允许变量扩展,这点与单引号的处理方式不同
heyyou=homeecho "$heyyou" # we get home
16、 `command` 倒引号
在前面的单双引号,括住的是字串,但如果该字串是一列命令列,要处理这种情况,得用倒单引号来做
aa=`date + %F` echo "today $aa"
在倒引号内的date + %F 会被视为指令,执行的结果会被带入aa变数中
17、**次方运算
两个星号在运算时代表“次方”的意思
let "aaaa=2**3"
echo "aaaa=$aaaa" 结果:8
18、输出/输入重导向
> >> < << :> &> 2&> 2<>>& >&2
文件描述,用一个数字(通常为0-9)来表示一个文件
常用的文件描述符如下:
文件描述符 名称 常用缩写 默认值
0 标准输入 stdin 键盘
1 标准输出 stdout 屏幕
2 标准错误输出 stderr 屏幕
我们简单的用<或> 时,相当于使用0<或1>
* cmd > file
把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件,使用bash的noclobber选项可以防止复盖原有文件。
* cmd >> file
把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件後面。
* cmd < file
使cmd命令从file读入
* cmd << text
从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用<<- ,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容,可以参考後面的例子。
* cmd <<< word
把word(而不是文件word)和後面的换行作为输入提供给cmd。
* cmd <> file
以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。
* cmd >| file
功能同>,但即便在设置了noclobber时也会复盖file文件,注意用的是|而非一些书中说的!,目前仅在csh中仍沿用>!实现这一功能。
: > filename 把文件"filename"截断为0长度.# 如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同).
cmd >&n 把输出送到文件描述符n
cmd m>&n 把输出 到文件符m的信息重定向到文件描述符n
cmd >&- 关闭标准输出
cmd <&n 输入来自文件描述符n
cmd m<&n m来自文件描述各个n
cmd <&- 关闭标准输入
cmd <&n- 移动输入文件描述符n而非复制它。(需要解释)
cmd >&n- 移动输出文件描述符 n而非复制它。(需要解释)
注意: >&实际上复制了文件描述符,这使得cmd > file 2>&1与cmd 2>&1 >file的效果不一样。