四、 認(rèn)識(shí)腳本和shell判斷表達(dá)式

shell腳本

一茫打、什么是 shell script

shell script 是利用 shell 的功能所寫的一個(gè)“程序 (program)”居触,這個(gè)程序是使用純文本文件,將一些 shell 的語法與指令(含外部指令)寫在里面老赤, 搭配正則表達(dá)式轮洋、管道命令與數(shù)據(jù)流重導(dǎo)向等功能,以達(dá)到我們所想要的處理目的抬旺。

簡(jiǎn)單的說弊予,也就是可以使用一個(gè)普通的文本,寫上多條 shell 命令开财,一起執(zhí)行這些命令汉柒。

但是,在這個(gè)文件中可以添加一些邏輯判斷什么的责鳍。

二碾褂、shell script 規(guī)范

script 的功能;

script 的版本信息历葛;

script 的作者與聯(lián)絡(luò)方式正塌;

script 的版權(quán)宣告方式;

script 的 History (歷史紀(jì)錄)啃洋;

script 內(nèi)較特殊的指令,使用“絕對(duì)路徑”的方式來下達(dá)屎鳍;

script 運(yùn)行時(shí)需要的環(huán)境變量預(yù)先宣告與設(shè)置宏娄。

三、執(zhí)行腳本方式 (source script, sh script, ./script)

source script

父進(jìn)程中執(zhí)行腳本中代碼
11414906-a63ee7c3bec94e80.png
sh script

子進(jìn)程中執(zhí)行腳本中的代碼逮壁,相當(dāng)于打開了一個(gè)子 shell ,一個(gè)全新的環(huán)境孵坚。


11414906-b0b9ef389c66aaa9.png

四、script 的默認(rèn)變量

特殊變量

$# :代表后接的參數(shù)“個(gè)數(shù)”,以上表為例這里顯示為“ 4 ”卖宠;
$@ :代表 "$1" "$2" "$3" "$4" 之意巍杈,每個(gè)變量是獨(dú)立的(用雙引號(hào)括起來);
$* :代表"$1<u>c</u>$2<u>c</u>$3<u>c</u>$4"扛伍,其中 <u>c</u> 為分隔字符较幌,默認(rèn)為空白鍵接箫, 所以本例中代表 "$1 $2 $3 $4"之意。

位置變量

位置變量是根據(jù)命令出現(xiàn)在命令行上的位置來確定的變量,在shell調(diào)用過程中熙涤,會(huì)按參數(shù)所在的位置進(jìn)行調(diào)用。
$0    $1     $2     $3  ...$9
eg : wc /etc/passwd /etc/group

Shell判斷表達(dá)式

test


11414906-9a3306706410b9ff.png

示例:

[root@biudefor script]# touch a.txt
[root@biudefor script]# test -e a.txt;echo $?
0                             # 測(cè)試成功穴豫,命令返回值為 0

[root@biudefor script]# test -e s.txt;echo $?
1                             # 測(cè)試失敗渤滞,命令返回值為 非 0

[root@biudefor script]# test -f a.txt;echo $?
0

[root@biudefor script]# test -d a.txt;echo $?
1

2

11414906-c11344bce936b7b6.png

示例:

[root@biudefor ~]# test -r a.txt; echo $?
0
[root@biudefor ~]# test -x a.txt; echo $?
1
[root@biudefor ~]# test -w a.txt; echo $?
0
[root@biudefor ~]# test -u a.txt; echo $?     # 判斷 a.txt 文件是否具有 SUID 屬性
1
[root@biudefor ~]# cat a.txt                        # 查看 a.txt ,此文件內(nèi)容為空
[root@biudefor ~]# test -s a.txt; echo $?    # 判斷 a.txt 文件中有內(nèi)容
1                                      # 命令返回值為 1 ,說明文件中沒有內(nèi)容
[root@biudefor ~]# echo "123" > a.txt
[root@biudefor ~]# test -s a.txt; echo $?
0

3

11414906-3ba594df6bf9f741.png

示例:

[root@biudefor ~]# touch b.txt
[root@biudefor ~]# ls -l a.txt
-rw-r--r--  1 shark  staff  4 12 17 22:59 a.txt
[root@biudefor ~]# ls -l b.txt
-rw-r--r--  1 shark  staff  0 12 17 23:05 b.txt
[root@biudefor ~]# test a.txt -nt b.txt; echo $?  # 判斷 a.txt 是否比 b.txt 新
1                                            # 返回 1, 表示判斷表達(dá)式不成立
[root@biudefor ~]# test b.txt -nt a.txt; echo $?
0

硬鏈接:兩個(gè)文件的inode號(hào)是一樣的

4

11414906-b76b47109910f6f1.png

示例:

[root@biudefor ~]# test 10 -eq 20; echo $?
1
[root@biudefor ~]# n1=10
[root@biudefor ~]# n2=20
[root@biudefor ~]# test $n1 -eq $n2; echo $?
1
[root@biudefor ~]# test $n1 -lt $n2; echo $?
0
[root@biudefor ~]# test $n1 -ne  $n2; echo $?
0

5

11414906-982f314b5778d10b.png

這里的 string 可以是實(shí)際的字符串因俐,也可以是一個(gè)變量

這里說的字符串是否為 0 的意思是 字符串的長度是否為 0

示例:

[root@biudefor ~]# test   -z  ''; echo $?      # 空字符串
0
[root@biudefor ~]# test  -z  ' '; echo $?      # 含有一個(gè)空格的字符串
1
[root@biudefor ~]# test  !  -z ' '; echo $?   # 判斷含有一個(gè)空格的字符串拇惋,其長度為非 0 的字符串, 空格也算是字符串。
0
[root@biudefor ~]# test -z ${name}; echo $?   # 變量未定義抹剩,shell 中認(rèn)為其長度為 0
0
[root@biudefor ~]# name=shark
[root@biudefor ~]# test -z ${name}; echo $?
1
[root@biudefor ~]# age=''                               # 定義變量撑帖,并且賦值為空字符串
[root@biudefor ~]# test  -z  ${age}; echo $?    # shell 中,被賦值為空字符串的變量長度也為 0
0

在 shell 中吧兔,以下兩種情況磷仰,變量的長度均視為 0

1.變量未定義

2.變量定義了,但賦值為空字符串境蔼,比如 a='' , b=""

[root@kube-master script]# name=shark
[root@kube-master script]# age=shark
[root@kube-master script]# test $name == $age ;echo $?
0
[root@kube-master script]# test $name != $age ;echo $?
1

6


11414906-a3e35d6921ce4c8a.png

判斷符號(hào) []

[ -z "{HOME}" ] ; echo ?

必須要注意中括號(hào)的兩端需要有空白字符來分隔喔灶平! 假設(shè)我空白鍵使用“□”符號(hào)來表示,那么箍土,在這些地方你都需要有空白鍵:

11414906-0be9fa81acdc9e22.png
  • 在中括號(hào) [] 內(nèi)的每個(gè)元素之間都需要用空格來分隔逢享;
  • 在中括號(hào)內(nèi)的變量,最好都以雙引號(hào)括號(hào)起來吴藻;

錯(cuò)誤示范

# 定義變量
[root@biudefor ~]# name="shark ops"

# 開始測(cè)試值是否相等
[root@biudefor ~]# [ ${name} == "xiguatian" ]

會(huì)報(bào)如下錯(cuò)誤信息:

bash: [: too many arguments

之前的錯(cuò)誤寫法 [ ${name} == "xiguatian" ] 的瞒爬,會(huì)變成這樣 [ shark ops == "xiguatian" ]

正確寫法應(yīng)該寫成這樣 [ "${name}" == "xiguatian" ] 的, 會(huì)變成這樣 [ "shark ops" == "xiguatian" ]

與或非

&&
邏輯與 [ ] && [ ]
||
邏輯或 [ ] || [ ]

邏輯非 [ ! ]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沟堡,一起剝皮案震驚了整個(gè)濱河市侧但,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌航罗,老刑警劉巖禀横,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粥血,居然都是意外死亡柏锄,警方通過查閱死者的電腦和手機(jī)酿箭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趾娃,“玉大人缭嫡,你說我怎么就攤上這事√疲” “怎么了妇蛀?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饶氏。 經(jīng)常有香客問我讥耗,道長,這世上最難降的妖魔是什么疹启? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任古程,我火速辦了婚禮,結(jié)果婚禮上喊崖,老公的妹妹穿的比我還像新娘挣磨。我一直安慰自己,他們只是感情好荤懂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布茁裙。 她就那樣靜靜地躺著,像睡著了一般节仿。 火紅的嫁衣襯著肌膚如雪晤锥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天廊宪,我揣著相機(jī)與錄音矾瘾,去河邊找鬼。 笑死箭启,一個(gè)胖子當(dāng)著我的面吹牛壕翩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播傅寡,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼放妈,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了荐操?” 一聲冷哼從身側(cè)響起芜抒,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎托启,沒想到半個(gè)月后宅倒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驾中,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年唉堪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肩民。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唠亚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出持痰,到底是詐尸還是另有隱情灶搜,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布工窍,位于F島的核電站割卖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏患雏。R本人自食惡果不足惜鹏溯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淹仑。 院中可真熱鬧丙挽,春花似錦、人聲如沸匀借。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吓肋。三九已至凳怨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間是鬼,已是汗流浹背肤舞。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屑咳,地道東北人萨赁。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像兆龙,于是被迫代替她去往敵國和親杖爽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 概念和原理 Shell是什么紫皇? Shell 是一個(gè)用 C 語言編寫的程序慰安,它是用戶使用 Linux 的橋梁。 Sh...
    陵無山閱讀 3,565評(píng)論 0 27
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評(píng)論 0 5
  • 一聪铺、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,746評(píng)論 0 10
  • 一铃剔、什么是 shell script shell script 是利用 shell 的功能所寫的一個(gè)“程序 (pr...
    沙礫丶ye閱讀 234評(píng)論 0 0
  • 特別說明:以下內(nèi)容來自簡(jiǎn)書撒桨,鏈接為原文出處查刻,一切權(quán)益歸原作者所有,在此感謝原作者的分享凤类,大家可以點(diǎn)擊以下鏈接查看原...
    沈祥佑閱讀 555評(píng)論 0 4