shell規程規範與變數
一、Shell指令碼概述
1.1 shell指令碼的概念
1.將要執行的命令按順序儲存到一個文字檔案
2.給該檔案可執行許可權
3.可結合各種shell控制語句以完成更復雜的操作
1.2 shell指令碼應用場景
1.重複性操作
2.互動性任務
3.批量事務處理
4.服務執行狀態監控
5.定時任務執行
1.3 shell的作用
1.3.1 shell-命令翻譯器,“翻譯官”
介於系統核心與使用者之間,負責解釋命令列
1.3.2 使用者的登入shell
1.登入後預設使用的Shell程式,一般為/bin/bash
2.不同Shell的內部指令、執行環境等會有所區別
二、shell指令碼的構成
1.指令碼申明(直譯器):若第一行為“#!/bin/bash” ,表示此行一下的程式碼語句是通過/bin/bash程式來結實執行,#!/bin/bash為預設直譯器,還有其他型別的直譯器
2.註釋資訊:以“#”開頭的語句表示為註釋資訊,被註釋的語句在執行指令碼時將不被執行
3.可執行語句:具體執行的命令
三、shell指令碼的執行
3.1 指定路徑的命令,要求檔案必須有執行(x)許可權
3.2 指定shell來解釋指令碼,不要求檔案必須有寫(x)的許可權
1.sh指令碼路徑
2.source指令碼路徑
四、重定向
4.1 重定向——互動式硬體裝置
型別 | 裝置檔案 | 檔案描述編號 |
---|---|---|
標準輸入 | /dev/stdin | 0 |
標準輸出 | /dev/stdout | 1 |
標準錯誤輸出 | /dev/stderr | 2 |
4.2 重定向——重定向操作
型別 | 操作符 | 用途 |
---|---|---|
重定向輸入 | < | 從指定的檔案讀取資料 |
重定向輸出 | > | 將標準輸出結果儲存到指定的檔案,並且覆蓋原有內容 |
重定向輸出 | >> | 將標準輸出結果追加到指定的檔案的尾部,不覆蓋原有內容 |
標準錯誤輸出 | 2> | 將錯誤資訊儲存到指定的檔案,並且覆蓋原有內容 |
標準錯誤輸出 | 2>> | 將錯誤資訊追加到指定的檔案的尾部,不覆蓋原有內容 |
混合輸出 | &> | 將標準輸出、標準錯誤儲存到同一檔案中 |
混合輸出 | 2>&1 | 將標準錯誤輸出重定向到標準輸出 |
五、Shell指令碼變數
5.1 變數的作用
1.用來存放系統和使用者需要使用的特定引數(值)
2.變數名:使用固定的名稱,由系統預設或使用者定義
3.變數值:能夠根據使用者設定、系統環境的變化而變化
5.2 變數的分類
1.自定義變數:由使用者自己定義、修改和使用
2.環境變數:由系統維護,用於設定工作環境
3.只讀變數:用於變數值不允許被修改的情況
4.位置變數:通過命令列給指令碼程式傳遞引數
5.預定義變數:bash中內建的一類變數,不能直接修改
六、自定義變數
6.1 定義自變數
1.格式:變數名=變數值
2.命名規則:以字母或下劃線開頭,區分大小寫(建議大寫)
6.2 檢視變數的值
**echo $變數名** |
符號 | 說明 |
---|---|
雙引號 | 允許通過$符號引用其他變數值 |
單引號 | 禁止引用其他變數值, $視為普通字元 |
反撇號 | 命令替換,提取命令執行後的輸出結果 |
6.4 read命令獲取輸入內容
第一種方法:1.read -p “提示資訊” 變數名 2.echo $"變數名" |
第二種方法:在指令碼檔案裡新增:1.echo -n “提示資訊” 2.read 變數名 3.echo $變數名 |
6.5 變數作用範圍
1.預設情況下,新定義的變數只在當前的Shell環境中有效,因此稱為區域性變數。當進入子程式或新的子Shell環境時,區域性變數將無法再使用。
2.可以通過內部命令export將指定的變數匯出為全域性變數,使使用者定義的變數在所有的子Shell環境中能夠繼續使用。
3.格式1:export 變數名
4.格式2:export 變數名=變數值
6.6 整數變數的運算
1.格式:expr 變數1 運算子 變數2 (運算子 變數3)
2.運算子: + 加法、- 減法、、* 乘法、/ 除法、% 取餘
3.舉例:
6.7 環境變數
1.使用 env 命令可以檢視到當前工作環境下的環境變數
2.變數USER表示使用者名稱稱,HOME表示使用者的宿主目錄,LANG表示語言和字符集,PWD表示當前所在的工作目錄,變數PATH表示可執行程式的預設搜尋路徑
6.8 只讀變數
用於變數值不允許被修改的情況
6.9 位置變數
1.當執行命令列操作時,第一個欄位表示命令名或指令碼程式名,其餘的字串引數按照從左到右的順序依次賦值給位置變數
2.$n:n為數字,$0代表命令本身,1~9代表第一個到第九個引數,十以上的引數需要使用大括號表示,比如第十個引數為 ${10}
6.10 預定義變數
1.$、$@:表示命令或指令碼要處理的引數
2.$:把所有引數看成以空格分隔的一個字串整體,代表"$1 $2 $3 $4"
3.$@:把各個引數加上雙引號分隔成n份的引數列表,每個引數是獨立 的,代表"$1" "$2" "$3" "$4"
4.$0:表示當前執行的指令碼或命令的名稱
5.$#:表示命令或指令碼要處理的引數的個數
6.$?:表示前一條命令或指令碼執行後的返回狀態碼,返回值為0表示執行正確,返回任何非0值均表示執行出現異常