filw的有意思吧

shell 中的特殊符号解释_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
7页免费6页免费2页免费1页免费6页免费4页免费2页免费4页免费8页1下载券3页免费
喜欢此文档的还喜欢39页1下载券8页1下载券10页1下载券7页免费4页免费
shell 中的特殊符号解释|s​h​e​l​l​ ​中​的​特​殊​符​号​解​释
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢在中常用的特殊符号罗列如下:
&&&&&&&&&&&&&&&&
输出输入重导向
&&&&&&&&&&&&&&&&&&&&&&&&&
这几乎是个满场都有的符号,除了先前已经提过的第一行
井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行。
由于这个特性,当临时不想执行某行指令时,只需在该行开头加上&就行了。这常用在撰写过程中。
如果被用在指令中,或者引号双引号括住的话,或者在倒斜线的后面,那他就变成一般符号,不具上述的特殊功能。
~&帐户的&目录~~~~~~
算是个常见的符号,代表使用者的&目录:;也可以直接在符号后加上某帐户的名称:
或者当成是路径的一部份:;当前的工作目录,这个符号代表当前的工作目录,她和内建指令&的作用是相同的。
~-&上次的工作目录,这个符号代表上次的工作目录。
在&中,担任连续指令功能的符号就是分号。譬如以下的例子:
;;&连续分号&
专用在&的选项,担任&的角色。
在&中,使用者应该都清楚,一个&代表当前目录,两个&代表上层目录。
在上行&的设定中,等号后的&代表的就是当前目录的意思。
如果档案名称以&开头,该档案就属特殊档案,用&指令必须加上&选项才会显示。除此之外,在&中,一个&代表匹配一个字元。
'string'&单引号&
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。
&string&&双引号&
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。
`command`&倒引号&
在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行。要处理这种情况,我们得用倒单引号来做。
在倒引号内的&会被视为指令,执行的结果会带入&变数中。
这个符号常运用在运算当中当做区隔用途。如下例
在路径表示时,代表目录。
通常单一的&代表&根目录的意思;在四则运算中,代表除法的符号。
文章出处:
在交互模式下的字元,有几个作用;放在指令前,有取消&的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令的最末端,表示指令连接下一行。
上例,我在&指令前加上&字元,作用是暂时取消别名的功能,将&指令还原。
上例&内的&,将&变数的功能取消了,因此,会输出&,而第二个&则会输出变数的内容&。
pipeline&是&系统,基础且重要的观念。连结上个指令的标准输出,做为下个指令的标准输入。
善用这个观念,对精简&有相当的帮助。
通常它代表反逻辑的作用,譬如条件侦测中,用&来代表不等于
在规则表达式中她担任&反逻辑的角色
上例,代表显示除了这几个文件的其他文件。
在&中,这是一个内建指令:什么事都不干,但返回状态值&。
echo&$?&#&回应为&
上面这一行,相当于&。不仅写法简短了,而且执行效率也好上许多。
有时,也会出现以下这类的用法
这行的作用是,检查这些环境变数是否已设置,没有设置的将会以标准错误显示错误讯息。像这种检查如果使用类似&或&这类的做法,基本上也可以处理,但都比不上上例的简洁与效率。
除了上述之外,还有一个地方必须使用冒号
在使用者自己的目录下的&或任何功能相似的档案中,设定关于路径的场合中,我们都使用冒号,来做区隔。
在文件名扩展上扮演的角色是匹配一个任意的字元,但不包含&字元。
善用她的特点,可以做比较精确的档名匹配。
相当常用的符号。在文件名扩展上,她用来代表任何字元,包含&字元。
在运算时,它则代表&乘法。
除了内建指令&,还有一个关于运算的指令&,星号在这里也担任乘法的角色。不过在使用上得小心,他的前面必须加上字元。
**&次方运算
两个星号在运算时代表&次方的意思。
变量替换的代表符号。
另外,在&里被定义为&行的最末端&。这个常用在&、、以及&当中。
${}&变量的正规表达式
bash&对&定义了不少用法。以下是取自线上说明的表列
文章出处:引用的执行引用变量,引用参数的算法与一般指令相同,指令本身为,其后为,然后依此类推。引用变量的代表方式如下:
个位数的,可直接使用数字,但两位数以上,则必须使用&符号来括住。
$*&则是代表所有引用变量的符号。使用时,得视情况加上双引号。
还有一个与&具有相同作用的符号,但效用与处理方式略为不同的符号。
$@&与&具有相同作用的符号,不过她们两者有一个不同点。
符号&将所有的引用变量视为一个整体。但符号&则仍旧保留每个引用变量的区段观念。
这也是与引用变量相关的符号,她的作用是告诉你,引用变量的总数量是多少。
$?&状态值&
一般来说,系统的进程以执行系统调用来结束的。这个回传值就是值。回传给父进程,用来检查子进程的执行状态。
一般指令程序倘若执行成功,其回传值为&;失败为&。
由于进程的是唯一的,所以在同一个时间,不可能有重复性的&。有时,会需要产生临时文件,用来存放必要的资料。而此亦有可能在同一时间被使用者们使用。在这种情况下,固定文件名在写法上就显的不可靠。唯有产生动态文件名,才能符合需要。符号或许可以符合这种需求。它代表当前的&。
使用它来作为文件名的一部份,可以避免在同一时间,产生相同文件名的覆盖现象。
ps:&基本上,系统会回收执行完毕的&,然后再次依需要分配使用。所以&即使临时文件是使用动态档名的写法,如果&执行完毕后仍不加以清除,会产生其他问题。
()&指令群组&
用括号将一串连续指令括起来,这种用法对&来说,称为指令群组。如下面的例子:,指令群组有一个特性,会以产生&来执行这组指令。因此,在其中所定义的变数,仅作用于指令群组本身。我们来看个例子
除了上述的指令群组,括号也用在&变数的定义上;另外也应用在其他可能需要加上字元才能使用的场合,如运算式。
这组符号的作用与&指令相似,用在算数运算上,是&的内建功能。所以,在执行效率上会比使用&指令要好许多。
{}&大括号&
有时候&当中会出现,大括号中会夹着一段或几段以分号做结尾的指令或变数设定。
这种用法与上面介绍的指令群组非常相似,但有个不同点,它在当前的&执行,不会产生&。
大括号也被运用在&函数的功能上。广义地说,单纯只使用大括号时,作用就像是个没有指定名称的函数一般。因此,这样写&也是相当好的一件事。尤其对输出输入的重导向上,这个做法可精简&的复杂度。
此外,大括号还有另一种用法,如下
这种大括号的组合,常用在字串的组合上,来看个例子
我们得到&,这几个目录。这组符号在适用性上相当广泛。能加以善用的话,回报是精简与效率。像下面的例子
如果不是因为支援这种用法,我们得写几行重复几次呀!
常出现在流程控制中,扮演括住判断式的作用。
这个符号在正则表达式中担任类似&范围或&集合的角色
上例,代表删除&等目录的意思。
这组符号与先前的&符号,基本上作用相同,但她允许在其中直接使用&与&逻辑等符号。
||&逻辑符号
这个会时常看到,代表&逻辑的符号。
&&&逻辑符号
这个也会常看到,代表&逻辑的符号。
&&后台工作
单一个符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。
/&.../&&单字边界
这组符号在规则表达式中,被定义为边界的意思。譬如,当我们想找寻&这个单字时,如果我们用
你将会发现,像&这类的单字,也会被当成是匹配的单字。因为&正巧是&的一部份。如果我们要必免这种情况,就得加上&边界的符号
+&加号&
在运算式中,她用来表示&加法。
此外在规则表达式中,用来表示很多个的前面字元的意思。
#&grep&'10/+9'&fileB009#这个符号在使用时,前面必须加上&字元。
在运算式中,她用来表示&减法。
此外也是系统指令的选项符号。
在&指令中,如果单独使用&符号,不加任何该加的文件名称时,代表标准输入的意思。这是&指令的共通选项。譬如下例
这里的&符号,既代表从标准输入读取资料。
不过,在&指令中则比较特别
这代表变更工作目录到上一次工作目录。
在运算式中,用来表示&除法。
此外,也被运用在关于变量的规则表达式当中的下列
一个&表示最短的&匹配,两个表示最长的&匹配。&
常在设定变数时看到的符号。
或者像是&的设定,甚至应用在运算或判断式等此类用途上。
常在条件判断式中看到,代表&等于的意思。
常在条件判断式中看到,代表&不等于的意思。
这个符号在规则表达式中,代表行的&开头位置。&
假设我们定义了一个变量为:
我们可以用&分別替换获得不同的值:
${file#*/}:拿掉第一条&及其左边的字串:
${file##*/}:拿掉最后一条&及其左边的字串:
${file#*.}:拿掉第一个&及其左边的字串:
${file##*.}:拿掉最后一个&及其左边的字串:
${file%/*}:拿掉最后一条&及其右边的字串:
${file%%/*}:拿掉第一条&及其右边的字串:&(空啦)
${file%.*}:拿掉最后一个&及其右边的字串:
${file%%.*}:拿掉第一个&及其右边的字串:
记忆的方法为:
#&是去掉左边的字符;在键盘上&在&之左边
%&是去掉右边的字符;在键盘上&在&之右边
单一符号是最小匹配﹔两个符号是最大匹配。&
PS:(不加号)表示只去掉最左边的一个“”
+++其实上面的语法,不只可以处理&和&,而是可以处理任意字符。勤奋的朋友可以自己编一个,处理一下试试──注
${file:0:5}:提取最左边的&个字符:
${file:5:5}:提取第&个字符右边的连续&个字符:
我们也可以对变量值里的字串作替换:
${file/dir/path}:将第一個&提换为&:
${file//dir/path}:将全部&提换为&:
+++这个语法跟里的替换语法相似,工具都是”相通“的──注
利用&还可针对不同的变数状态赋值未设定、空值、非空值:&
${file-my.file.txt}&:假如&没有设定,则使用&作返回值。空值及非空值时不作处理
${file:-my.file.txt}&:假如&没有设定或为空值,则使用&作返回值。&非空值时不作处理
${file+my.file.txt}&:假如&设为空值或非空值,均使用&作返回值。没有设定时不作处理
${file:+my.file.txt}&:若&为非空值,则使用&作返回值。&没设定及空值时不作处理
${file=my.file.txt}&:若&没设定,则使用&作返回值,同时将&赋值为&。&空值及非空值时不作处理
${file:=my.file.txt}&:若&没设定或为空值,则使用&作返回值,同时将&赋值为&。&非空值时不作处理
${file?my.file.txt}&:若&没设定,则将&输出至&。&空值及非空值时不作处理
${file:?my.file.txt}&:若&没设定或为空值,则将&输出至&。&非空值时不作处理
以上的理解在于你一定要分清楚&与&及&这三种赋值状态
一般而言与&有关若不带&的话不受影响若带&则连&也受影响
还有哦,可计算出变量值的长度:
${#file}&可得到&,因为&刚好是&个字符
接下来,再为大家介绍一下&的数组处理方法。
一般而言,这样的变量只是将&替换为一个单一的字符串,
但是改为&,则是将&定义为数组
bash&的数组替换方法可参考如下方法:
${A[@]}&或&可得到&全部元素
${A[0]}&可得到&第一个元素,则为第二个元素
${#A[@]}&或&可得到&所包含的元素数
${#A[0]}可得到&即第一个元素的长度,可得到&第四个元素的长度
A[3]=xyz&则是将第四个元素重新定义为&
引号的作用&
1&双引号(“”)
1)使用””可引用除字符美元符号、(反引号)、(反斜线)外的任意字符或字符串。双引号不会阻止对这三个字符做特殊处理(标示变量名、命令替换、反斜线转义)。
&&Eg:“”将打印
&&&&&Echo&“”将打印
&&&&&Echo&–“”&&将打印
2)如果要查新包含空格的字符串经常用到双引号
2单引号(’’)
1)&&&&&&如果用单引号把字符串括起来,则内字符串中的任何特殊字符的特殊含义均被屏蔽。
2)&&&&&&举例:–‘’将打印没有屏蔽是因为选项“”的缘故
&&&&&&&&&&echo&‘’&将打印
3反引号()
1)&&&&&&shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量
2)&&&&&&举例:将打印
4.反斜线()
1)如果下一个字符有特殊含义,反斜线防止误解其含义,即屏蔽其特殊含义。
2)下属字符包含有特殊含义:“&
3)&在打印字符串时要加入八进制字符(相应字符)时,必须在前面加反斜线,否则作普通数字处。
举例:&””将打印
在脚本的实际编写中,有一些特殊的变量十分有用:
  1.&$#&传递到脚本的参数个数
  以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过个
  脚本运行的当前进程号
  后台运行的最后一个进程的进程号
  与相同,但是使用时加引号,并在引号中返回每个参数
  显示使用的当前选项,与命令功能相同
  显示最后命令的退出状态。表示没有错误,其他任何值表明有错误。
中的日期格式转换
$&date&&+%G-%m-%d&%H:%M:%S&&-d&&$t_t&&#&$t_t的格式是比较随意的
unix&shell中的日期之间间隔的天数
##存在的话,可以直接使用。&
shell中日期加减指定间隔单位
增加小时:
以指定格式显示文件更改后最后日期,如
一、用户登陆进入系统后的系统环境变量:&
$HOME&使用者自己的目录&
$PATH&执行命令时所搜寻的目录&
$MAILCHECK&每隔多少秒检查是否有新的信件&
$PS1&在命令列时的提示号&
$PS2&当命令尚未打完时,要求再输入时的提示号&
$MANPATH&man&指令的搜寻路径&
二、特殊变量:&
$0&这个程序的执行名字&
$n&这个程序的第个参数值,
$*&这个程序的所有参数&
$#&这个程序的参数个数&
$$&这个程序的
$!&执行上一个指令的
$?&执行上一个指令的返回值&
三、中的变元:&
*&任意字符串&
?&一个任意字符&
[abc]&a,&b,&c三者中之一&
[a-n]&从到的任一字符&
四、几个特殊字符表示&
/c&打印一行时没有换行符&这个我们经常会用到&
/v&垂直制表&
//&反斜线本身&
五、判断文件的属性&
格式:操作符&
-e&文件存在返回,&否则返回
-r&文件可读返回否则返回
-w&文件可写返回否则返回
-x&文件可执行返回否则返回
-o&文件属于用户本人返回否则返回
-z&文件长度为返回否则返回
-f&文件为普通文件返回否则返回
-d&文件为目录文件时返回否则返回
六、测试字符串&
字符串字符串 当两个字串相等时为真&
字符串字符串当两个字串不等时为真&
-n&字符串 &   &当字符串的长度大于时为真&
-z&字符串     &当字符串的长度为时为真&
字符串      &当串字符串为非空时为真&
七、测试两个整数关系&
数字数字    &两数相等为真&
数字数字    &两数不等为真&
数字数字    &数字大于数字为真&
数字数字   &数字大于等于数字为真&
数字数字    &数字小于数字为真&
数字数字    &数字小于等于数字为真&
八、逻辑测试&
-a& &     &与&
-o       &或&
!        非&
今天介绍特殊字符的引用&
shell中的特殊字符有&
1、美元符&
2、反斜杠&
3、反引号&
4、 双引号&
下面我一一举列说明&
1、显示的是上一条指令退出状态&
2、效果同上&
3、显示的是
4、显示的是
5、显示的是
  大家可能已经看出 符号在双引号中具有特殊意义 双引号对符号不起作用&
而单引号可以将特殊字符的的特殊意义屏蔽掉,使其能显示为字符本身,反斜&
杠也可以将特殊字符的特殊含义屏蔽掉,使特殊字符失去特殊含义。&
二、 反斜杠&
  反斜杠的作用是将特殊符号字符的特殊含义屏蔽掉,使其还是原字符&
echo&/$A&显示为如果不加将显示为
echo&/`&显示为
echo&/&&显示为双引号&
echo&//&显示为
三、反引号&
  反引号的功能是命令替换,将反引号中的字符串做为命令来执行,我们在用编程时经常用的到 将系统命令的执行结果赋给一个变量&
echo&$A&显示的不是而是当时的时间串&
比如有一文件的内容如下 &
B=`cat&A|grep&234`&#&检索文件中含有字符串的行&
echo&$B&将显示为
echo&&$B&&将显示为什么?&
echo&&/$B&&将显示为什么?读者自己试试&
四、双引号&
  在系统中有些特殊字符,为避免引用这些特殊字符 往往用双引号或单引号将这些特殊字符引起来,使其不具有特殊含义。&
  但有一部分特殊字符在引号中还是具有特殊含义,用双引号引起来是不起作用的。本文中所列的前四个特殊字符在双引号中还是特殊字符。为了使其不具有特殊含义一是用单引号引进来二是用反斜线使其失去作用。&
  比如我们想原样输出这些特殊字符&
   以上不是你所期望的结果,因为双引号对它们不起作用,你只能这样才能输出这些特殊字符的原形&
将分别显示为 
五、其它特殊字符&
  大家注意到 除了前四个特殊字符外 我将其它的特殊字符都放在一块,这是因为前四个特殊字符在双引号中还是具有特殊含义,所以单独拿出来讲,除此以外的特殊字符如果你要输出这些特殊字符的原形,你就可以用双引号或单引号引起来使其失去特殊含义。&
&&,&,*,?,[,]对有特殊含义 但你可以用双引号引起来输入这些原形&
  讲了这么多大家是不是已经注意到所有的特殊字符在单引号中失去特殊含义,如果你要输出特殊字符原形但又记不清那些特殊字符在双引号中不能输出原形,建议你干脆用单引号引起来。
条件测试语句&
一、条件语句 &
格式:&
if&条件表达式&
then&#当条件为真时执行以下语句&
else&#为假时执行以下语句&
if 语句也可以嵌套使用&
if&条件表达式
if&条件表达式
if&条件表达式
你可以进行多层嵌套 一个语句一定要跟一个 表示该层条件结束  否则会造成语法错误&
结合前面讲的 举例如下:&
这里先讲一个条件语句中用到的命令 表示测试后面的条件是否为真&
echo&&$1不是文件或目录
以上的例子还可以改成如下所示&
elif&test&-d&&$1&&#elif 同
echo&&$1不是文件或目录
fi&
以上的例子不知您是否看懂是什么意思吗?&
假如我们现在将这个例子保存为
执行刚才的程序&
这个例子是检查你的输入的参数是否是一个文件 如果是就打印 如果是一个目录 先转目录再打印 如果即不是文件也不是目录给出提示&
二、多重条件测试语句
格式:&
case&字串 
模式命令列表
模式命令列表
多重条件语句是以开始以结束 中间可以有多个条件列表 功能是测试字串和和里面的模式有没有匹配的有就执行里面的命令列表 模式也可以是号 表示任意字串,每个模式里面的最后要心双引号结束,否则会发生语法错误。&
现举例如下:&
echo&&未知的类型
假如将以上内容保存在文件中&
执行  &将会对文件进行编译&
执行& 将会把文件通过打印机&
假如我将以上内容改一下,你是否会知道它的执行结果?&
echo&&未知的类型
while&命令格式&
while&条件表&
shell首先执行条件表如果条件表的最后一条语句的退出状态为零则执行盾环体内的命令&
表执行完后再检查条件表如果退出状态为零将继续执行如此循环往复直到条件表的&
最后一条语句的退出状态非零退出状态为零就是条件为真
举例说明&假如文件的内容如下
while&true&#true是系统的关键词&表示真&
最后这个程序显示的是&
这个程序的运算就是将到加起来&
下面将这个程序再改动一下&
改动后的程序运算结果和上面是一样&但程序比上面的要简练&
在这个循环中还可以以做为测试条件&它正好与测试的条件相反也就是当条件为假时将继续执行循环体内的语句否则就退出循环体下面还用这个例子
当不等于时循环&就是当条件为假时循环否则就退出而第一个例子是当不等于
时循环也就是测试条件为真时循环
命令格式
for&变量&名字列表&
这里的名字列表是一个由空格分隔的字符串列表在执行循环时每次依次从名字表&
中取出一个字符串赋给循环变量作为变量的值
在写语句时也可以省略名字列表部分这表示用当前的位置参数来代替这时的名&
下面举个例子&
比如在你的电脑中有两个目录一个是一个是在这两个目录中有个相同的文件但其&
中一个目录中的一个或多个文件刚刚修改过现在我忘记刚才改的是那几个文件&了那么我靠梢员冉弦幌抡饬礁瞿柯嫉奈募椭懒?程序如下
下面再举一个不带名字列表的例子&
文件内容保存在中&并可执行&
我们在执行这个程序时命令行如下
执行结果如下
大家从这个例子中可以看到命令行的参数被逐一读入一次&
三循环控制语句&
break&命令不执行当前循环体内下面的语句从当前循环退出
continue&命令是程序在本循体内忽略下面的语句从循环头开始执行
一命令组合圆括号和花括号&
shell中有两种方法将命令组合在一起圆括号和花括号圆括号使创建一个子
来读取并执行括起来的名命令左括号和右括号不论出现在命令行中的什么位置都会&
认为它们具有特殊的组合意义的只有用双引号将它们括起来引用才表示圆括号或花括号&
的原义例如
将出现语法上的错误要想输出字符串&只能括起来&
这样才能被正确解释
利用组合命令有什么作用呢
一用圆括号组合命令&
圆括号的组合命令可以创建子进程运行组合程序建立子进程的功能是很有用的因为&
子在组合命令中的种种操作都不会影响到当前的各变量的值
子进程在执行组合命令时改变了工作目录并在新的工作目录下执行一系例命令执行&
完后它可以不必返回原工作目录因为子进程工作目录的改变不会影响到当前工作目录
创建子进程后将当前的环境也同样传给子当前中用输出到环境中的&
各变量在子中同样有效
花括号也可以将命令组合在一起左&右花括号只有作为一条命令的第一个字出现时
shell才它们含有特殊含义
与圆括号不同的是花括号并不创建子只是由当前的来读取并执行括起来的&
命令有时用户希望使用一组命令的顺序输出作为另一组命令的输入此时用花括号是很方&
不论是用圆括号不是花括号退出状态都是等于最后一条括起来的命令的退出状态
二可以在当前中执行的命令&
用户在使用时一定要了解那些是可以在当前中执行的命令&那些不可以&
可以在当前中执行的命令有
# 注释开始
& 在后台执行一个进程
? 匹配一个字符
* 匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)
$- 使用set及执行时传递给shell的标志位
$! 最后一个子进程的进程号
$# 传递给shell script的参数个数
$* 传递给shell script的参数
$@ 所有参数,个别的用双引号括起来
$? 上一个命令的返回代码
$0 当前shell的名字
$n (n:1-) 位置参数
$ 进程标识号(Process Identifier Number, PID)
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:216805次
积分:3426
积分:3426
排名:第3710名
原创:27篇
转载:680篇
评论:12条
(9)(2)(3)(1)(11)(5)(7)(9)(17)(32)(2)(5)(9)(6)(3)(12)(36)(32)(20)(15)(105)(4)(36)(16)(15)(52)(61)(41)(9)(12)(10)(19)(19)(1)(7)(2)(5)(3)(1)(2)(29)(22)

我要回帖

 

随机推荐