shell 脚本中双引号、单引号、反引号的区别,其他命令

本文深入探讨了Shell脚本中的实用技巧,包括命令执行控制、条件判断、字符串操作及变量处理等内容。通过具体示例介绍了如何利用特殊字符增强脚本功能,如使用@和-控制make命令的行为,运用反引号(`)和$(command)执行命令替换,以及如何通过单引号、双引号区分普通字符与特殊字符等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果; Android中会定义某个变量等于@,例如 hide:= @

通常make执行的命令如果出错(该命令的退出状态非0)就立刻终止,不再执行后续命令,但如果命令前面加了-号,即使这条命令出错,make也会继续执行后续命令。

通常rm命令和mkdir命令前面要加-号,因为rm要删除的文件可能不存在,mkdir要创建的目录可能已存在,这两个命令都有可能出错,但这种错误是应该忽略的。


0、 

linux shell脚本EOF妙用:

http://blog.youkuaiyun.com/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

原文出自博主宋哥:http://blog.youkuaiyun.com/iamlaosong/article/details/54728393点击打开链接


iamlaosong文

最近要编个shell脚本处理数据,需要检测数据文件是否存在,文件名中包含日期,所以需要生成最近几天的日期,以便检测文件是否存在,看下面的脚本中如何使用双引号、单引号、反引号:

[plain]  view plain  copy
  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  

1、由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。如例程中的 '-1 day',再比如:

$ string=’$PATH’
$ echo $string
$PATH
$
可见$保持了其本身的含义,作为普通字符出现。

2、由双引号括起来的字符,除$(美元符号)、\(反斜杠)、’(单引号)、和”(双引号)这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于“$”来说,就是用其后指定的变量的值来代替这个变量和$;对于“\”而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上“\”的只有四个字符$,\,’和”本身。而对”号,若其前面没有加“\”,则Shell会将它同前一个”号匹配。如例程中的"-$i day",会随着循环,将$i转换成其代表的值。

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
note readme.txt 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



出自:http://blog.youkuaiyun.com/jackyechina/article/details/52813007  

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
这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值