學習shell程式設計筆記 二

2021-07-09 10:09:15 字數 3673 閱讀 1126

變數

含義$0

當前指令碼的檔名

$n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。

$#傳遞給指令碼或函式的引數個數。

$*傳遞給指令碼或函式的所有引數。

$@傳遞給指令碼或函式的所有引數。被雙引號(」 「)包含時,與 $* 稍有不同,下面將會講到。

$?上個命令的退出狀態,或函式的返回值。

$$當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。 ∗

和 @ 都表示傳遞給函式或指令碼的所有引數,不被雙引號(」 「)包含時,都以」1""

2」 … 「$n」 的形式輸出所有引數。

但是當它們被雙引號(」 「)包含時,」∗"

會將所有

的引數作

為乙個整

體,以"

1 2…

n」的形式輸出所有引數;」@"

會將各個

引數分開

,以" 1」 「2"

…"n」 的形式輸出所有引數。

$? 可以獲取上乙個命令的退出狀態。所謂退出狀態,就是上乙個命令執行後的返回結果。

退出狀態是乙個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。

命令替換是指shell可以先執行命令,將輸出結果暫時儲存,在適當的地方輸出。

命令替換的語法:

`command`
注意是反引號,不是單引號,這個鍵位於 esc 鍵下方。

變數替換可以根據變數的狀態(是否為空、是否定義等)來改變它的值

可以使用的變數替換形式:

形式說明

$變數本來的值

$如果變數 var 為空或已被刪除(unset),那麼返回 word,但不改變 var 的值。

$如果變數 var 為空或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。

$如果變數 var 為空或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。若此替換出現在shell指令碼中,那麼指令碼將停止執行。

$如果變數 var 被定義,那麼返回 word,但不改變 var 的值。

運算子說明舉例

+ 加法

expr $a + $b結果為 30。

- 減法

expr $a - $b結果為 10。

* 乘法

expr $a \* $b結果為 200。

/ 除法

expr $b / $a結果為 2。

% 取餘

expr $b % $a結果為 0。

= 賦值

a=$b 將把變數 b 的值賦給 a。

== 相等

用於比較兩個數字,相同則返回 true。 [ a==

b ] 返回 false。

!= 不相等

用於比較兩個數字,不相同則返回 true。 [ a!

= b ] 返回 true。

乘號(*)前邊必須加反斜槓()才能實現乘法運算

運算子說明

舉例-eq

檢測兩個數是否相等,相等返回 true。

[ $a -eq $b ] 返回 true。

-ne檢測兩個數是否相等,不相等返回 true。

[ $a -ne $b ] 返回 true。

-gt檢測左邊的數是否大於右邊的,如果是,則返回 true。

[ $a -gt $b ] 返回 false。

-lt檢測左邊的數是否小於右邊的,如果是,則返回 true。

[ $a -lt $b ] 返回 true。

-ge檢測左邊的數是否大等於右邊的,如果是,則返回 true。

[ $a -ge $b ] 返回 false。

-le檢測左邊的數是否小於等於右邊的,如果是,則返回 true。

[ $a -le $b ] 返回 true。

運算子說明舉例

!非運算,表示式為 true 則返回 false,否則返回 true。

[ ! false ] 返回 true。

-o或運算,有乙個表示式為 true 則返回 true。

[ $a -lt 20 -o $b -gt 100 ] 返回 true。

-a與運算,兩個表示式都為 true 才返回 true。

[ $a -lt 20 -a $b -gt 100 ] 返回 false。

運算子說明舉例

=檢測兩個字串是否相等,相等返回 true。

[ $a = $b ] 返回 false。

!=檢測兩個字串是否相等,不相等返回 true。

[ $a != $b ] 返回 true。

-z檢測字串長度是否為0,為0返回 true。

[ -z $a ] 返回 false。

-n檢測字串長度是否為0,不為0返回 true。

[ -n $a ] 返回 true。

str檢測字串是否為空,不為空返回 true。

[ $a ] 返回 true。

操作符說明舉例

-b file

檢測檔案是否是塊裝置檔案,如果是,則返回 true。

[ -b $file ] 返回 false。

-c file

檢測檔案是否是字元裝置檔案,如果是,則返回 true。

[ -b $file ] 返回 false。

-d file

檢測檔案是否是目錄,如果是,則返回 true。

[ -d $file ] 返回 false。

-f file

檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。

[ -f $file ] 返回 true。

-g file

檢測檔案是否設定了 sgid 位,如果是,則返回 true。

[ -g $file ] 返回 false。

-k file

檢測檔案是否設定了粘著位(sticky bit),如果是,則返回 true。

[ -k $file ] 返回 false。

-p file

檢測檔案是否是具名管道,如果是,則返回 true。

[ -p $file ] 返回 false。

-u file

檢測檔案是否設定了 suid 位,如果是,則返回 true。

[ -u $file ] 返回 false。

-r file

檢測檔案是否可讀,如果是,則返回 true。

[ -r $file ] 返回 true。

-w file

檢測檔案是否可寫,如果是,則返回 true。

[ -w $file ] 返回 true。

-x file

檢測檔案是否可執行,如果是,則返回 true。

[ -x $file ] 返回 true。

-s file

檢測檔案是否為空(檔案大小是否大於0),不為空返回 true。

[ -s $file ] 返回 true。

-e file

檢測檔案(包括目錄)是否存在,如果是,則返回 true。

[ -e $file ] 返回 true。

shell程式設計筆記(二)

終於要開始正式寫shell指令碼了 建立陣列變數的方式,直接給陣列的索引賦值 array index value注意 index是有取值範圍的 0,1023 如果乙個標量的名字和陣列名重名,那麼該標量對應的值就會變成該陣列0索引對應的值 另一種初始化陣列的方式,可以給多個元素一次性賦值 訪問方式也在...

shell程式設計筆記(二)

這兩個屬於附加許可權位,這兩個附加許可權通過設定使用者id位 suid 和設定組id位 sgid 的機制來賦給程式 當你執行了乙個設定了suid位的程式時,你就繼承了該程式的屬主的許可權,當你執行了乙個設定了sgid位的程式,你就繼承了該程式所屬使用者組的許可權 可以看到passwd程式的suid位...

shell程式設計學習筆記

c語言中文網 shell教程 學習這篇文章時,發現它在單引號和雙引號有什麼區別上寫的不夠準確,於是網上查詢資料 shell程式設計中單引號,雙引號,各種括號的區別 學習這篇部落格時,發現寫的還是不夠準確,繼續網上查詢資料 雙引號作用與單引號類似,區別在於它沒有那麼嚴格。單引號告訴shell忽略所有特...