shell指令碼書寫方法

在shell學習過程中,感覺挺有用的一份比較,略整理分享給大家。

首先,shell的作用

shell指令碼書寫方法

使用者的登陸shell 登陸後預設的shell程式是: /bin/bash

不同的shell內部指令,執行環境會有所區別

常見的shell有

/bin/sh

/bin/bash

/sbin/nologin

1。編寫指令碼程式碼:

使用vi編輯器,每行一條Linux命令,按照順序執行

2。然後賦予指令碼檔案可執行的屬性

3。執行指令碼檔案的三種方法

。/chao。sh

sh /chao。sh

source /chao。sh

更完善的指令碼構成

指令碼宣告

註釋資訊

可執行語句

shell指令碼書寫方法

重定向操作

型別 運算子 用途

重定向輸入 < 從指定檔案讀取而不是從鍵盤輸入

重定向輸出 > 將輸出檔案儲存到指定檔案(覆蓋原有內容)

>> 將輸出檔案儲存到指定檔案(覆蓋原有內容)

標準錯誤輸出 2> 將錯誤資訊儲存到指定的檔案(覆蓋原有內容)

2>> 將錯誤資訊儲存到指定的檔案

混合輸出 &> 將標準輸出,標準錯誤的內容儲存到同一檔案中

管道運算子號“|”

將左側的命令輸出結果,作為右側命令的處理物件

shell指令碼書寫方法

shell變數的作用

為靈活管理Linux系統提供的特定引數,有兩層意思

變數名:使用固定的名稱,由系統預設或使用者定義

變數值: 能夠根據使用者設定,系統環境的變化而變化

變數的型別

自定義變數:由使用者自己定義,修改和使用

環境變數: 由系統維護,用於設定工作環境

位置變數: 透過命令列給指令碼程式傳遞引數

預定義變數:BASH中內建的一類變數,不能直接修改

定義一個新的變數

格式: 變數名=變數值

變數名以字母或下劃線開頭,區分大小寫,建議全大寫

檢視變數的值: echo $變數名

賦值時使用引號:

雙引號:允許使用$符引用其他變數值

單引號: 禁止引用其他變數值,$視為普通字元

反撇號:命令替換,提取命令執行後的輸出結果

將鍵盤輸入內容為變數賦值

格式: read [-p “提示資訊”] 變數名

設定變數的作用範圍

export 變數名

export 變數名=變數值

兩種格式可以混合使用

整數變數的運算:

expr 變數1 運算子 變數2 [運算子 變數3]

常見的運算子

加法運算子 +

減法運算子: -

乘法運算子:\*

除法運算子: /

取餘運算:%

整數變數的運算(2)

((變數=變數運算子變數));

等號後面的變數可以是具體數值

例子:

((a=a+3));

環境變數:

由系統提前建立,用來設定使用者的工作環境

配置檔案: /etc/profile ~/。bash_profile

常見環境變數的舉例

shell指令碼書寫方法

位置變數:

表示為$n, n為1~9之間的數字

shell指令碼書寫方法

預定義變數:

/etc/passwd /etc/shadow

例如一些服務的內建使用者名稱或密碼

如apache的啟動使用者就是預定義變數

條件測試操作

測試特定的 表示式是否成立,當條件成立時,測試語句的返回值為0,否則為其他數值

格式 : test 條件表示式

shell指令碼書寫方法

應用例項:

shell指令碼書寫方法

shell指令碼書寫方法

shell指令碼書寫方法

shell指令碼書寫方法

shell指令碼書寫方法

test -z 進行測試的時候 字串長度為0的時候 結果才返回1

如果變數數值為0 返回0

條件測試操作

[ 運算子 檔案或目錄]

shell指令碼書寫方法

[5] 部分是判斷表示式,-d表示判斷是否是目錄

&&是”邏輯與“運算子,只有&&前面的判斷成立,後面的語句才會執行

-b的意思是判斷 後面的路徑是否是一個目錄

echo $? 表示對剛剛執行的表示式進行判斷

0表示成立,1表示不成立

-e filename 如果 filename存在,則為真 [ -e /var/log/syslog ]

-d filename 如果 filename為目錄,則為真 [ -d /tmp/mydir ]

-f filename 如果 filename為常規檔案,則為真 [ -f /usr/bin/grep ]

-L filename 如果 filename為符號連結,則為真 [ -L /usr/bin/grep ]

-r filename 如果 filename可讀,則為真 [ -r /var/log/syslog ]

-w filename 如果 filename可寫,則為真 [ -w /var/mytmp。txt ]

-x filename 如果 filename可執行,則為真 [ -L /usr/bin/grep ]

filename1-nt filename2 如果 filename1比 filename2新,則為真 [ /tmp/install/etc/services -nt /etc/services ]

filename1-ot filename2 如果 filename1比 filename2舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

字串比較運算子 (請注意引號的使用,這是防止空格擾亂程式碼的好方法)

-z string 如果 string長度為零,則為真 [ -z “$myvar” ]

-n string 如果 string長度非零,則為真 [ -n “$myvar” ]

string1= string2 如果 string1與 string2相同,則為真 [ “$myvar” = “one two three” ]

string1!= string2 如果 string1與 string2不同,則為真 [ “$myvar” != “one two three” ]

算術比較運算子

num1-eq num2 等於 [ 3 -eq $mynum ]

num1-ne num2 不等於 [ 3 -ne $mynum ]

num1-lt num2 小於 [ 3 -lt $mynum ]

num1-le num2 小於或等於 [ 3 -le $mynum ]

num1-gt num2 大於 [ 3 -gt $mynum ]

num1-ge num2 大於或等於 [ 3 -ge $mynum ]

整數值比較

格式: [ 整數1 運算子 整數2 ]

shell指令碼書寫方法

字串比較

格式1: [ 字串1 = 字串2 ]

[ 字串1 != 字串2 ]

格式2: [ -z 字串 ]

shell指令碼書寫方法

邏輯測試:

格式1: [ 表示式1 ] 運算子 [ 表示式2 ]

格式2: 命令1 運算子 命令2

if語句的結構

shell指令碼書寫方法

shell指令碼書寫方法

while語句的語法結構

shell指令碼書寫方法

shell指令碼書寫方法