Linux Shell 常用命令

Linux Shell 中的反引号,单引号,双引号的区别

1.反引号位 (`):在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。

和$()是一样的。在执行一条命令时,会先将其中的 `` ,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行,

例如:echo `ls`

会先执行 ls 得到 xx.sh等,再替换原命令为:echo xx.sh

[root@localhost ~]# echo today is $(date "+%Y-%m-%d")
today is 2017-11-07
[root@localhost ~]# echo today is `date "+%Y-%m-%d"`
today is 2017-11-07
注意:
[root@localhost ~]#  echo Linux `echo Shell `echo today is `date "+%Y-%m-%d"```
Linux Shellecho today is 2017-11-07     #过多使用``会有问题
[root@localhost ~]# echo Linux `echo Shell $(echo today is $(date "+%Y-%m-%d"))`
Linux Shell today is 2017-11-07    ``和$()混合使用
[root@localhost ~]# echo Linux $(echo Shell $(echo today is $(date "+%Y-%m-%d")))
Linux Shell today is 2017-11-07    #多个$()同时使用也不会有问题


注释:反引号与$()都是命令替换 

最大的区别为:转义字符的使用不同。 
反引号中:若要使用转自字符需要\\ 
$()中:若要使用转义字符用\

例1:反引号使用1个\,$()使用1个

例2:反引号使用2个\,$()使用1个

 

2.单引号he双引号

首先, 单引号和双引号,都是为了解决中间有空格的问题。

因为空格在linux中时作为一个很典型的分隔符,比如 string1=this is a string,这样执行就会报错。

为了避免这个问题,因此就产生了单引号和双引号。他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的 ' $ '(参数替换)和' ` '(命令替换)和 ' \ '是例外。所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`。

所以下面的结果:
        num=3
        echo ‘$num’
        $num
        echo “$num”
        3

        所以,如果需要在双引号””里面使用这两种符号的直接含义,需要用反斜杠转义

 

摘取于:https://www.cnblogs.com/yasmi/articles/5129571.html

3.大括号、花括号 { }

大括号拓展。将对大括号中的文件名做扩展

第一种:对大括号中的以 逗号分割的文件列表进行拓展。如 touch {a,b}.txt 结果为a.txt b.txt。

第二种:对大括号中以点点(..)分割的顺序文件列表起拓展作用,如:touch {a..d}.txt 结果为a.txt b.txt c.txt d.txt

4.双中括号[[ ]] 

5.单小括号 ()

①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。

②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。

③用于初始化数组。如:array=(a b c d)

6.单中括号 []

Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab \< bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。

7${ }变量替换

一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围

[root@hadoop000 WorkPath]# A=linux
[root@hadoop000 WorkPath]# echo $AB   #输出为空

[root@hadoop000 WorkPath]# echo ${A}B  # 精准的界定范围
linuxB
[root@hadoop000 WorkPath]#

 

更多详细介绍 :http://www.cnblogs.com/chengd/p/7803664.html

8.布尔运算符

 

== 可用于判断变量是否相等,= 除了可用于判断变量是否相等外,还可以表示赋值。

= 与 == 在 [ ] 中表示判断(字符串比较)时是等价的,例如:

1

2

3

4

s1="foo"

s2="foo"

[ $s1=$2 ] && echo "equal"

[ $s1==$2 ] && echo "equal"

最后两个语句是等价的

在 (( )) 中 = 表示赋值, == 表示判断(整数比较),它们不等价,比如

1

2

3

((n=5))

echo $n

((n==5)) && echo "equal"

((n=5)) 表示赋值,((n==5)) 表示判断。

posted @ 2018-11-07 17:24  云深不知、处  阅读(252)  评论(0编辑  收藏  举报