特殊符号组合(特殊符号组合图案大全)

转自http://blog.chinaunix.net/uid-16946891-id-5088144.htmlshell中常用的特殊符号如下:#;;;。, /

转自http://blog.chinaunix.net/uid-16946891-id-5088144.html

shell中常用的特殊符号如下:
#;;;。, / \ '字符串& # 39;| !$ ${} $?$ $* "字符串& # 34;* ** ?:^ $ # $ @ ` command ` { }[][[]]()(())| | & { xx,yy,zz,...} ~ ~+~-& \ & lt;...\ & gt+ - %= == !=
#英镑符号(评论)
几乎是满场的符号,除了前面提到的那个& # 34;第一行& # 34;
#!/bin/bash
井号也经常出现在行首或完整指令之后。这种情况表示符号后面跟注释文本,不会被执行。
#这一行是注释。
由于这个特性,当你暂时不想执行一行指令时,只需在行首加上#即可。这是写作过程中经常用到的。
如果用在指令中,或者用引号括起来,或者在反斜杠后面,则成为通用符号,不具备上述特殊功能。

[root@RHEL6 scripts]# echo "a=$a" # a= 0a=[root@RHEL6 scripts]# #echo "a=$a" # a= 0[root@RHEL6 scripts]#

~账户的主目录
是一个常用符号,代表用户的主目录:CD ~;;您也可以直接在符号:cd ~user之后添加帐户名称,或者作为路径的一部分:~/bin
~+当前工作目录。这个符号代表当前的工作目录,它和内置命令pwd的作用相同。
# echo ~+/var/log
~-最后一个工作目录。这个符号代表最后一个工作目录。
# echo ~-/etc/httpd/logs
;分号(命令分隔符)
1。在外壳中,充当& # 34;顺序指令& # 34;功能符号是& # 34;分号& # 34;。
例如:CD ~/backup;mkdir启动;Cp ~/。*启动/。
使用分号(;),分号前的命令完成后会立即执行(无论成功与否)
;;分号(终止符)
是一个专用于case的选项,用作终止符。

case "$fop"inhelp)echo "Usage: Command -help -version filename";;version)echo "version 0.1";;esac

。dot(点,也就是“点”)
1。在shell中,用户应该都知道一个点代表当前目录,两个点代表上级目录。
CDPATH =。:~:/home:/home/web:/var:/usr/local
在上行cdpath的设置中,等号后面的点代表当前目录的含义。
2。如果文件名以点开始,则该文件是一个特殊文件,只有在ls命令添加了-a选项时才会显示。
3。在正则表达式中,点表示必须有一个任意字符,而空大小写字符也是一个字符。
& # 39;字符串& # 39;单引号
用单引号括起来的内容将被视为单个字符串。引号中的$符号代表变量,这没有任何作用,也就是说,它被视为一个通用符号,以防止任何变量被替换。
hey you = homeecho & # 39;$ heyyou & # 39#我们得到$ hey you
& # 34;字符串& # 34;双引号
双引号括起来的内容将被视为单个字符串。它防止通配符扩展,但允许变量扩展。这和单个论点的处理是不同的。
hey you = homeecho & # 34;$ heyyou & # 34# wegethome
`command `反引号/反单引号
前面的单引号和双引号将字符串括起来,但是如果字符串是命令行呢?答案是不执行。为了处理这种情况,我们必须使用反单引号。

[root@awake scripts]# fdv=`date +%F`[root@awake scripts]# echo "Today $fdv"Today 2015-06-19[root@awake scripts]#

后引号中的日期+%F将被视为一条指令,执行结果将被带入fdv变量。
fdv = ` date+% F '还有一种写法,就是fdv=$(date +%F)。这两个命令是等效的,但是反单引号(```)很容易被识破(& # 39;')单引号。
,逗号(标点符号中的逗号)
这个符号在运算中常用作& # 34;区域& # 34;使用。下面这个例子
#!/bin/bash let & # 34;t1 = ((a = 5 + 3,b = 7 - 1,c = 15/3))& # 34;回声& # 34;t1= $t1,a = $a,b = $ b & # 34
/正斜杠
表示路径时,表示目录。
CD/etc/rc.d
CD.../...
CD/
通常single/代表根目录;在四则运算中,表示除法的符号。
让& # 34;num1 = ((a = 10 / 2,b = 25/5))& # 34;
\交互模式下反斜杠
的转义字符有几个作用;在放置指令之前,它具有取消别名的效果;当放在特殊符号前面时,特殊符号的功能消失;放在指令的末尾,表示指令连接到下一行。
#类型rmrm别名为“RM-I & # 39;# \rm。/*.log
在上面的例子中,我在rm命令前添加了转义符,用来临时取消别名功能,恢复RM命令。
# bkdir =/home # echo & # 34;备份目录,\ $ bkdir = $ bkdir & # 34Backup dir,$bkdir = /home
前面echo例子中的$bkdir,escape取消了$ variable的功能,所以会输出$bkdir,而第二个$bkdir会输出变量/home的内容。
|管道
管道是UNIX系统的一个基本而重要的概念。将上一个命令的标准输出链接为下一个命令的标准输入。
who | wc -l
用好这个概念对精简脚本会有相当大的帮助。
!感叹号(否定或反转)的意思是没有逻辑运算的意义
1。通常,它代表反逻辑的功能。例如,在条件检测中,使用!=来代表& # 34;不等于& # 34;

if [ "$?" != 0 ]thenecho "Executes error"exit 1fi

2.在正则表达式中,她充当& # 34;反向逻辑& # 34;的作用

ls a[!0-9]

在上面的例子中,除了a0,a1....显示a9。
3。在历史命令中,“!”“”的用法

[root@RHEL6 ~]#history......1036 echo $1037 ll1038 ll | grep '^d'1039 ll | grep "^d"1040 history1041 ll | grep '^d'1042 history[root@RHEL6 ~]# !1038 //执行第1038条命令ll | grep '^d'drwxr-xr-x. 2 root root 4096 Jun 12 15:23 bindrwxr-xr-x. 2 root root 4096 Jun 16 15:33 scriptsdrwxr-xr-x. 7 root root 4096 Nov 21 2014 vmware-tools-distrib[root@RHEL6 ~]# !! //执行上一个命令也就是刚刚的!1038ll | grep '^d'drwxr-xr-x. 2 root root 4096 Jun 12 15:23 bindrwxr-xr-x. 2 root root 4096 Jun 16 15:33 scriptsdrwxr-xr-x. 7 root root 4096 Nov 21 2014 vmware-tools-distrib[root@RHEL6 ~]# !echo //执行最近一echo为开头的命令,也就是1036那条命令echo $4316[root@RHEL6 ~]#

!美元的使用

mkdir /var/www/html/uploadchown -R apache !$ #这时的!$表示上一条命令 mkdir /var/www/html/upload,也就是chown将/var/www/html/upload的所有者权限分配给apache这个用户

:冒号
在bash中,这是一个内置指令:& # 34;什么都不做& # 34;但是返回状态值0。
:
echo $?#响应为0
: > F.
上面一行相当于cat/dev/null >: f.
.不仅文字简短,执行效率也高很多。
有时,还会出现以下用法
: ${HOSTNAME?} $ {用户?} ${MAIL?}
这一行的作用是检查这些环境变量是否已经设置。否则,错误消息将显示为标准错误。这种检查基本上可以通过使用test或if之类的实践来处理,但不如上面的例子简洁高效。
除了以上这些,还有一个地方必须使用冒号
path = $ path:$ HOME/fbin:$ HOME/f perl:/usr/local/Mozilla
来设置。bash_profile或用户自己的主目录中任何具有类似功能的文件。路径& # 34;在某些场合,我们都用冒号来区分它们。
*星号(通配符)
是一个非常常见的符号。
1。在文件名扩展上,她用来表示0到无限个任意字符。

[root@RHEL6 ~]# ls a*aaa anaconda-ks.cfg[root@RHEL6 ~]#

2.在正则表达式中,*表示从零到无穷大重复前一个字符,例如:grep-n & # 39;Ess* file.txt,可能匹配es、Ess、ESS等。正则表达式中的0到无限个字符用“.”表示。*".
3。在操作中,它代表& # 34;乘法& # 34;。
让& # 34;fmult = 2 * 3 & # 34
除了内置的指令let,还有一个关于操作的指令expr,其中星号也充当& # 34;乘法& # 34;的作用。不过使用的时候要小心,前面一定要加转义字符。
**权力运作
两个星号代表& # 34;权力& # 34;的意思。
让& # 34;sus = 2 * * 3 & # 34回声& # 34;sus = $ sus & # 34# sus = 8
$和美元符号
1。使用变量的前导符号,即需要加在变量前面的变量替换的代表符号

[root@RHEL6 ~]# vrs=123[root@RHEL6 ~]# echo "vrs = $vrs"vrs = 123[root@RHEL6 ~]#

2.它在正则表达式中被定义为& # 34;行& # 34;生产线的末端。这是grep、sed、awk和vim(vi)中常用的。

[root@RHEL6 ~]# ll | grep "txt#34; //列出行末是txt结尾的行-rw-r--r--. 1 root root 1700 May 21 10:50 1.txt-rw-r--r--. 1 root root 650 May 31 18:11 123.txt-rw-r--r--. 1 root root 1700 May 21 10:50 2.txt-rw-r--r--. 1 root root 923 May 27 09:20 network.txt-rw-r--r--. 1 root root 96 Jun 1 17:58 printf.txt-rw-r--r--. 1 root root 673 Jun 1 12:24 regular_express.txt

3.在bash中,$本身就是一个变量。它代表当前shell的进程代码,即所谓的PID(进程ID)。如果你想知道我们当前shell的PID,可以这样做。

[root@RHEL6 ~]# echo $4316[root@RHEL6 ~]#

出现的数字是您的PID号码
$!
shell运行的最后一个后台进程的PID
?问号
1。文件名扩展的作用是匹配任意字符,但不包含空字符。

[root@RHEL6 ~]# ls m?n*man.1 man.test[root@RHEL6 ~]#

利用好她的特点,我们可以进行更准确的文件名匹配。
2。"?"在bash中,问号也是一个特殊的变量。这个变量在bash中非常重要。这个变量是最后执行的命令返回的值。当我们执行一些命令时,这些命令执行后会返回一个代码。一般来说,如果命令执行成功,将返回0值,如果执行过程中出现错误,将返回错误代码。通常,它被一个非0的值代替。
3。在正则表达式中(扩展正则表达式,需要grep -E或egrep)"?"意思是不匹配吗?数字前的单个字符,还是4(th)这样的类型的例子?等于4或4
$?状态变量
一般来说,UNIX(linux)系统的进程以系统调用exit()的执行结束。这个返回值就是状态值。它被发送回父进程,以检查子进程的执行状态。
如果通用指令程序执行成功,其返回值为0;是1。

[root@RHEL6 ~]# tar cvzf backup.tar.gz scripts/ > /dev/null[root@RHEL6 ~]# echo $?0[root@RHEL6 ~]#

因为进程的ID是唯一的,所以不可能同时有重复的PID。有时,脚本需要生成临时文档来存储必要的数据。而且这个脚本也可能同时被用户使用。在这种情况下,固定文件名在书写上是不可靠的。只有生成动态文件名才能满足需要。$符号可以满足这种需求。它表示当前shell的PID。

[root@RHEL6 ~]# echo "$HOSTNAME, $USER, $MAIL" > ftmp.$[root@RHEL6 ~]# ll ftm*-rw-r--r--. 1 root root 39 Jun 17 09:50 ftmp.4316[root@RHEL6 ~]# echo $4316[root@RHEL6 ~]#

将其作为文件名的一部分,可以避免同一文件名同时重叠的现象。
ps:基本上系统会回收已经执行过的PID,然后根据需要重新分配。所以,即使是用动态文件名写的脚本,如果执行后不清除脚本,也会出现其他问题。
$ {}变量的正则表达式
bash为$ { }定义了相当多的用法。下表列
$ { parameter:-word } $ { parameter:= word } $ { parameter:?word } $ { parameter:+word } $ { parameter:offset } $ { parameter:offset:length } $ {!prefix * } $ { # parameter } $ { parameter # word } $ { parameter # # word } $ { parameter % % word } $ { parameter/pattern/String } $ { parameter//pattern/String }
$ *
$ *是指脚本的执行引用变量。参考参数的算法与通用指令的算法相同。指令本身是0,后面是1,依此类推。引用变量以下列方式表示:
[17],,,,,,,,,,$ {10},$ {11}...
个位数可以直接用数字。
$*是所有引用变量的符号。使用时,应酌情加双引号。
echo & # 34;$*"
还有一个符号和$ *的功能一样,只是效用和处理方法略有不同。
$@
$@与$ *的功能相同,但两者有一点不同。
符号$ *将所有引用变量视为一个整体。但是,符号$ @仍然保留了每个引用变量的节的概念。
$#
这也是一个与引用变量相关的符号。她的作用是告诉你参考变量的总数是多少。
echo & # 34;$#"
$(())和declare-i
declare-I total = $ first nu * $ sec nu
total = $(($ first nu * sec nu))
两个例子的意思都是一件事,就是做整数乘法,或者到
不同的是空可以加在小方括号里,这也是合法的写法,但是declare-I不能。
()命令组
将一系列连续的指令括在括号中。这种用法称为外壳指令组。如下面这个例子:(CD ~;vcgh = `pwdEcho $vcgh),指令组有一个特点,shell会通过生成一个subshell来执行这组指令。因此,其中定义的变量只作用于指令组本身。我们来看一个例子
# cat ftmp-01#!/bin/basha = FSH(a = incg;echo-e & # 34;\ n $ a \ n & # 34)echo $ a #。/ftmp-01inggfsh
除了上面的指令组,括号也用在数组变量的定义中;此外,它还可以用于其他可能添加转义字符的情况,比如表达式。
(()]
这组符号类似于let指令。它用于算术运算,是bash的内置函数。所以执行效率会比使用let指令好很多。
#!/bin/bash((a = 10))echo-e & # 34;初始值,a = $ a \ n & # 34((a++))echo & # 34;a++之后,a = $ a & # 34
{}花括号(代码块)
有时会出现在脚本中,一个或多个段落用& # 34;分号& # 34;进行最后的命令或变量设置。
#卡特彼勒ftmp-02#!/bin/basha = FSH { a = inbc;echo-e & # 34;\ n $ a \ n & # 34} echo $ a #。/ftmp-02InBCInBC
这种用法与上面描述的指令组非常相似,但有一点不同。它在当前shell中执行,不产生子shell。
大括号也用于& # 34;函数& # 34;在功能上。广义地说,当简单地使用花括号时,它的行为就像一个没有指定名称的函数。所以,这样写剧本是一件相当不错的事情。特别是对于输入和输出的重定向,这种方法可以简化脚本的复杂性。
另外,大括号还有另外一种用法,如下
{xx,yy,zz,...}
这种花括号组合常用在字符串的组合中。我们来看一个例子
mkdir {usera,userb,userc}-{home} Usera-bin,usera-data,userb-home,userb-bin,userb-data,userc-home,userc-bin,userc-data,这些目录。这组符号的适用性相当广泛。如果能很好地利用它,回报将是简化和效率。像下面这个例子
chownroot/usr/{UCB/{ex,edit},lib/{ex?。?*,how_ex}}
要不是支持这种用法,我们得写好几行,重复好几遍!
[]方括号
1。在通配符和正则表达式中,[]表示括号中必须有一个字符。比如【abcd】表示必须有一个字符,可以是A、B、C、D四个字符中的任意一个;
2。在过程控制中,它起着封闭判断公式的作用。
如果[& # 34;$?"!= 0]那么
echo & # 34;执行错误& # 34;
exit 1
fi
[-]
表示通配符和正则表达式中的[0-9]、[a-z]和[A-Z]等范围。需要注意的是,字母的范围与语系有关
[] [
[[ ]]
这组符号的功能与前面的[]符号基本相同,但她允许在其中直接使用||和&&逻辑等符号。
#!/bin/bashread akif[[$ AK & gt;5 | | $ ak & lt9 ]]thenecho $akfi
||逻辑符号
这个符号经常见到。在括号中,[]代表或逻辑的符号。
命令行如下
cmd1||cmd2
如果cmd1结束并正确执行($?=0),如果执行cmd1时出现错误($?≠0),将执行cmd2
&&逻辑符号
。也常见到括号里的[]代表and逻辑的符号。
在命令行中,如下
cmd1&&cmd2
如果cmd1结束并正确执行($?=0),如果cmd1结束并且是一个错误($?≠0),cmd2不会执行。

[root@RHEL6 ~]# ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe //如果/tmp/abc目录不存在则创建这个目录,成功后在目录下创建hehe文件ls: cannot access /tmp/abc: No such file or directory //这个就是ls /tmp/abc标准错误输出[root@RHEL6 ~]# ll /tmp/abc/hehe-rw-r--r--. 1 root root 0 Jun 17 11:00 /tmp/abc/hehe //已经创建了文件[root@RHEL6 ~]# ls /tmp/bcd || echo "not exist" && echo "exist" //这个实例告诉我们||与&&的使用是要注意顺序的。ls: cannot access /tmp/bcd: No such file or directorynot existexist[root@RHEL6 ~]# ls /tmp/bcd && echo "exist" || echo "not exist" //呈上,这个是正确的顺序ls: cannot access /tmp/bcd: No such file or directorynot exist[root@RHEL6 ~]#一般来说,假设判断式有三个,也就是cmd1 && cmd2 || cmd3,而且顺序通常不会变,因为一般说cmd2与cmd3会放置肯定可以执行成功的命令。

&后台工作
一个&符号,放在一个完整指令序列的末尾,意味着这个指令序列被放到后台工作。
tar cvfz data.tar.gz数据&gt。/dev/null &
\ & lt;...\ & gt单词边界
在正则表达式中,这组符号被定义为& # 34;边界& # 34;的意思。比如当我们要查找单词“the”时,如果我们使用
grep the FileA
,你会发现类似“there”这样的单词也会被视为匹配词。因为它恰好是那里的一部分。如果我们想避免这种情况,我们必须加上& # 34;边界& # 34;符号
grep & # 39;\'File
+plus
在表达式中,她用来表示& # 34;加法& # 34;。
expr 1+2+3
另外,在正则表达式中,用来表示& # 34;多& # 34;的前面字符的含义。
# grep & # 39;10\+9'file 1091009100091000910000931010009 #该符号前面必须有转义字符。
-减号(破折号)
在表达式中,她用来表示& # 34;减法& # 34;。
expr 10-2
也是系统指令的选项符号。
ls -expr 10-2
在GNU指令中,如果单独使用-符号,则表示& # 34;当没有添加文件名时。输入标准& # 34;的意思。这是GNU指令的一个常见选项。例如,在下面的示例
tar xpvf -
中,这里的-符号表示从标准输入中读取数据。
但是,cd命令是特殊的
cd -
这意味着将工作目录更改为& # 34;最后一次& # 34;工作目录。
%除法(模)
用来表示& # 34;在表情上。司& # 34;。
expr 10% 2
此外,以下
$ { parameter % word } $ { parameter % % word }
也用在关于变量的正则表达式中。1%表示最短的单词匹配,2%表示最长的单词匹配。
= equals
设置变量时经常看到的符号。
vara = 123 echo & # 34;vara = $ vara & # 34
或者像PATH的设置一样,甚至应用于运算或判断公式等用途。
== equals
经常出现在条件判断中,代表& # 34;等于& # 34;的意思。
if [$vara == $varb ]
...以下省略
!=不等于
常见于条件判断公式中,代表& # 34;不等于& # 34;的意思。
if [ $vara!= $varb ]
...缩写为

1。在正则表达式中,这个符号代表& # 34;始& # 34;位置

[root@RHEL6 ~]# ll | grep "^d"drwxr-xr-x. 2 root root 4096 Jun 12 15:23 bindrwxr-xr-x. 2 root root 4096 Jun 16 15:33 scriptsdrwxr-xr-x. 7 root root 4096 Nov 21 2014 vmware-tools-distrib[root@RHEL6 ~]#

2、在[]中也用& # 34;!"(感叹号)表示“不”
,如[A-Z]表示非大写字符,[ABC]表示非A、B、c,[]的用法在通配符和正则表达式中含义相同。
输出/输入重定向
>;& gt& gt& lt& lt& lt:& gt& & gt2 & >;2 & lt& gt& gt& & gt&2
文件描述符,用一个数字(通常是0-9)来表示一个文件。
常用的文件描述符如下:
文件描述符名称的常用缩写默认值
0标准输入stdin键盘
1标准输出stdout屏幕
2标准错误输出stderr屏幕
我们简单地用:,它相当于用0 :(下面会详细介绍)。
* cmd &gt。File
将cmd命令的输出重定向到文件File。如果文件已经存在,清除空原始文件,并使用bash的noclobber选项防止覆盖原始文件。
* cmd &gt。& gtFile
将cmd命令的输出重定向到文件File。如果文件已经存在,请将信息添加到原始文件中。
* cmd &lt。文件
导致从文件
* cmd < & lt;Text
从命令行读取输入,直到与Text相同的一行结束。除非输入用引号括起来,否则这种模式会用shell变量替换输入。如果您使用< & lt-,下一个输入行开始的制表符将被忽略,结束行也可以是一串制表符加上与文本相同的内容。可以参考下面的例子。
* cmd &lt。& lt& ltWord
提供Word(而不是文件word)和下面的换行符作为cmd的输入。
* cmd &lt。& gtFile
以读写方式重定向文件File到输入,文件file不会被破坏。这个特性只有在应用程序利用它的时候才有意义。
* cmd &gt。| file
与>:的作用相同,但即使设置了noclobber,file也会被覆盖。注意是用|而不是某些书上说的!,目前还只在csh中使用>:!实现这个功能。
:& gt;文件名file & # 34文件名& # 34;截断到0长度。#如果文件不存在,那么创建一个长度为0的文件(与& # 39;触摸& # 39;有异曲同工之妙)。
cmd >: &n将输出发送到文件描述符n
CMDM >: &n将输出到文件符号M的信息重定向到文件描述符N
cmd >:&-关闭标准输出
cmd < &n从文件描述符n
cmd m < &n从文件描述符中的每个N
cmd M < & N-关闭标准输入
cmd < &n-移动输入文件描述符N而不是复制
cmd &gt&n-移动输出文件描述符n,而不是复制它。
注意:> &实际上复制了文件描述符,这使得cmd > > file 2 & gt&1和cmd 2 >:& 1 & gt;文件的效果是不同的。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/217142.html

发表回复

登录后才能评论