Linux之shell指令碼(一)

2021-09-11 09:30:18 字數 4070 閱讀 1998

shell終端直譯器可以當作人與計算機硬體之間的「翻譯官」,它作為使用者與linux系統內部的通訊媒介,除了能夠支援各種變數與引數外,還提供了比如迴圈、分支等高階程式語言才有的控制結構特性。shell指令碼命令的工作方式有兩種:互動式和批處理。

互動式:使用者每輸入一條命令就立即執行。

批處理:由使用者事先編寫好乙個完整的shell指令碼,shell會一次性執行指令碼中諸多的命令。

2.1、簡單的shell指令碼

shell指令碼由3種不同的元素組成:第一行為指令碼宣告(#!),用來告訴系統使用哪種shell直譯器來執行指令碼;第二行為注釋資訊(#)是對指令碼功能或某些命令的介紹資訊;後邊部分為可執行語句。

下邊就是乙個簡單的shell指令碼,主要功能為顯示當前目錄中檔案的資訊。

2.2、接收使用者的引數像上邊執行的指令碼程式只能執行一些預先定義好的功能,為了讓shell指令碼程式更好地滿足使用者的一些實時需求,必須讓指令碼程式能夠像之前執行命令時那樣,可以接收使用者輸入的引數,這些其實在shell中已經設定好了。例如:$0表示當前shell指令碼程式的名稱;$#表示一共有幾個引數;$*表示這幾個引數各是什麼;$?表示上一次命令的返回值;$1、$2、$3...則分別表示對應著第n個位置的引數值。

3.1、測試語句(測試語句格式:[  條件表示式  ],注意:中括號前後都必須有乙個空格!)按照測試物件來劃分,條件測試語句可以分為4種:

檔案測試語句即使用指定條件來判斷檔案是否存在或者許可權是否滿足等情況,引數如表所示:

檔案測試所用引數 引數

作用-d

測試檔案是否為目錄型別

-e測試檔案是否存在

-f測試檔案是否為一般檔案

-r測試當前使用者是否有許可權讀取

-w測試當前使用者是否有許可權寫入

-x測試當前使用者時候有許可權執行

下面通過幾個例子來解釋一下條件測試語句的基本用法,其中$?的作用為顯示上一條命令執行後的返回值。如果返回0,則表示存在;如果返回值為非零,則表示不存在。(其中test、test.sh等測試檔案均為自己建立)

邏輯測試語句用於對測試結果進行邏輯分析,根據測試結果可實現不同的效果,常用的邏輯判斷語句有3種:「與」(&&)、「或」(||)、「非」(!),和數學中的乙個道理。

常用邏輯測試語句 符號

作用&&

兩個都為真結果才為真,如果第乙個為假,則後面的不執行。

||有乙個為真則結果為真,如果第乙個為真,則後邊的不執行。

!取反結果。

和上邊的例子使用同一組測試檔案,首先判斷test是否為目錄檔案,如果是,則繼續執行&&後邊的判斷,判斷test.sh是否為一般檔案,如果是,則$?輸出為0。

[root@localhost ~]# [ -d test ] && [ -f test.sh ]

[root@localhost ~]# echo $?

0

稍微修改一下**,把後邊的test.sh改為判斷是否為目錄檔案,看一下結果會是怎樣?

[root@localhost ~]# [ -d test ] && [ -d test.sh ]

[root@localhost ~]# echo $?

1

我們發現$?的結果變為1,原因就是test.sh不是目錄檔案,所有後邊的判斷為假。

為了證明第乙個判斷語句為假,那麼後邊的語句將不會執行,我們寫這樣乙個測試語句(echo和「hi」之間有空格)。

「或」(||)語句表示只要其中有乙個為真那麼結果就為真。

「非」(!)語句即取相反的意思。

[root@localhost ~]# [ -d test ]

[root@localhost ~]# echo $?

0[root@localhost ~]# [ ! -d test ]

[root@localhost ~]# echo $?

1

整數運算比較符僅是對數字進行操作,不能將數字和字串、檔案等內容一起操作。因為等號與賦值命令符衝突,大於號和小於號分別與輸出重定向命令符和輸入重定向命令符衝突。因此一定要使用規範的整數比較運算子來進行操作。

整數比較運算子

操作符作用-eq

是否等於

-ne是否不等於

-gt是否大於

-lt是否小於

-ge是否大於等於

-le是否小於等於

操作很簡單,就是數字之間的比較。

[root@localhost ~]# [ 10 -eq 10 ]

[root@localhost ~]# echo $?

0[root@localhost ~]# [ 10 -ne 10 ]

[root@localhost ~]# echo $?

1[root@localhost ~]# [ 10 -le 10 ]

[root@localhost ~]# echo $?

0

字串比較語句用於判斷測試字串是否為空值,或兩個字串是否相同。它經常用來判斷某個變數是否未被定義(即內容為空值),理解起來也比較簡單。

常見的字串比較運算子

操作符作用=

比較字串內容是否相同

!=比較字串內容是否不同

-z判斷字串內容是否為空

[root@localhost ~]# string=10

[root@localhost ~]# [ -z string ]

[root@localhost ~]# echo $?

1

linux 之shell 指令碼(一)

萬用字元 說起命令列下省事的辦法,還有個東西不能不提,就是萬用字元。號可以代表多個任意的字元,號代表任意乙個字元。賦予這個檔案 可執行 許可權。chmod x daily backup.sh 執行指令碼 daily backup.sh 指令碼檔案並不要求特定的副檔名,只要是文字檔案,具有可執行許可權...

linux之shell指令碼學習(一)

bin bash echo hello your name longxiong echo your name echo for i in ls opt do echo done str 1234 echo unset str echo echo 執行的指令碼為 0 echo 第乙個引數 1 echo...

Linux之shell指令碼

1.shell是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面。它接收使用者輸入的命令並把它送入核心去執行。2.每個linux系統的使用者可以擁有他自己的使用者介面或shell,用以滿足他們自己專門的shell需要。同linux本身一樣,shell也有多種不同的版本 比如bash或sh ...