shell 脚本中双引号、单引号、反引号的区别,其他命令如果make 执⾏的命令前⾯加了@字符,则不显⽰命令本⾝⽽只显⽰它的结果; Android 中会定义某个变量等于@,例如 hide:= @通常make 执⾏的命令如果出错(该命令的退出状态⾮0)就⽴刻终⽌,不再执⾏后续命令,但如果命令前⾯加了-号,即使这条命令出错,make 也会继续执⾏后续命令。
通常rm 命令和mkdir 命令前⾯要加-号,因为rm 要删除的⽂件可能不存在,mkdir 要创建的⽬录可能已存在,这两个命令都有可能出错,但这种错误是应该忽略的。0、
:
blog.csdn/zongshi1992/article/details/71693045
1、#set +e #在"set -e"之后出现的代码,⼀旦出现了返回值⾮零,整个脚本就会⽴即退出。
2、# mkdir 命令参数:-p, --parents 可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录; -v, --verbose 每次创建新⽬录都显⽰信息
3、#[ -n STRING ] 如果STRING的长度⾮零则返回为真,即⾮空是真
4、#eval命令将会⾸先扫描命令⾏进⾏所有的替换,然后再执⾏命令。该命令使⽤于那些⼀次扫描⽆法实现其功能的变量。该命令对变量进⾏两次扫描。这些需要进⾏两次扫描的变量有时候被称为复杂变量。
5、#echo -n 不换⾏输出
6、使⽤ read 命令暂停,等待⽤户输⼊,按下任意键都可以继续。
-p :指定读取值时的提⽰符;
-t :指定读取值时等待的时间(秒)。
read -p "Press any key to continue." var
iamlaosong ⽂
最近要编个shell 脚本处理数据,需要检测数据⽂件是否存在,⽂件名中包含⽇期,所以需要⽣成最近⼏天的⽇期,以便检测⽂件是否存在,看下⾯的脚本中如何使⽤双引号、单引号、反引号:1、由单引号括起来的字符都作为普通字符出现。特殊字符⽤单引号括起来以后,也会失去原有意义,⽽只作为普通字符解释。如例程中的 '-1 day',再⽐如:
$ string=’$PATH’
$ echo $string
$PATH
$
可见$保持了其本⾝的含义,作为普通字符出现。
2、由双引号括起来的字符,除$(美元符号)、\(反斜杠)、’(单引号)、和”(双引号)这⼏个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于“$”来说,就是⽤其后指定的变量的值来代替这个变量和$;对于“\”⽽⾔,是转义字符,它告诉shell 不要对其后⾯的那个字符进⾏特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前⾯加上“\”的只有四个字符$,\,’和”本⾝。⽽对”号,若其前⾯没有加“\”,则Shell 会将它同前⼀个”号匹配。如例程中的"-$i day",会随着循环,将$i 转换成其代表的值。[plain]
1. OPDATE=`date -d '-1 day' +%Y%m%d`
2.
3. for i in $(seq 10)
4. do
5. FILEDATE=`date -d "-$i day" +%Y%m%d`
6. echo ${FILEDATE}
7. done
3、反引号(`)这个字符所对应的键⼀般位于键盘的左上⾓,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令⾏,在执⾏时,shell⾸先执⾏该命令⾏,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。如例程中的`date -d '-1 day' +%Y%m%d`就是把这条命令的结果赋给变量OPDATE。
4、反引号还可以嵌套使⽤。但需注意,嵌套使⽤时内层的反引号必须⽤反斜杠(\)将其转义。例如:
$ abc=`echo The number of users is \`who| wc -l\``
$ echo $abc
The number of users is 2
$
5、在反引号之间的命令⾏中也可以使⽤shell的特殊字符。Shell为得到``中命令的结果,它实际上要去执⾏``中指定的命令。执⾏时,命令中的特殊字符,如$,”,?等⼜将具有特殊含义,并且``所包含的可以是任何⼀个合法的Shell命令,如:
$ ls
Notice Unix.dir
$ TestString="`echo $HOME ` ` ls [nN]*`"
$ echo $TestString
/home/yxz note Notice
最后,说句题外话:反引号是⼀个⽼的⽤法,$()才是新的⽤法,如例程中的$(seq 10)。⽆论是在学习中,还是在实际⼯作中,$()都是被推荐的⽤法。所以上⾯的的⽤法可以改成:
$ TestString="$(echo $HOME) $(ls [nN]*)"
$ echo $TestString
/home/yxz note Notice
对于脚本的执⾏情况,可以⽤下⾯的命令来分析:
sh -x test.sh
linux循环执行命令脚本linux 下 `dirname $0`
【`】,学名叫“倒引号”, 如果被“倒引号”括起来, 表⽰⾥⾯需要执⾏的是命令。
⽐如 `dirname $0`, 就表⽰需要执⾏ dirname $0 这个命令
【“”】 , 被双引号括起来的内容, ⾥⾯ 出现 $ (美元号: 表⽰取变量名) `(倒引号: 表⽰执⾏命令) \(转义号:表⽰转义), 其余的才表⽰字符串。
【’‘】, 被单引号括起来的内容, ⾥⾯所有的都表⽰串, 包括上⾯所说的 三个特殊字符。
在命令⾏状态下单纯执⾏ $ cd `dirname $0` 是毫⽆意义的。因为他返回当前路径的"."。
这个命令写在脚本⽂件⾥才有作⽤,他返回这个脚本⽂件放置的⽬录,并可以根据这个⽬录来定位所要运⾏程序的相对位置(绝对位置除外)。
$0:当前Shell程序的⽂件名
dirname $0,获取当前Shell程序的路径
cd `dirname $0`,进⼊当前Shell程序的⽬录
在/home/admin/test/下新建test.sh内容如下:
1. cd `dirname $0`
2. echo `pwd`
然后返回到/home/admin/执⾏
1. sh test/test.sh
运⾏结果:
1. /home/admin/test
这样就可以知道⼀些和脚本⼀起部署的⽂件的位置了,只要知道相对位置就可以根据这个⽬录来定位,⽽可以不⽤关⼼绝对位置。这样脚本的可移植性就提⾼了,扔到任何⼀台服务器,(如果是部署脚本)都可以执⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论