1. 程式人生 > 其它 >shell規程規範與變數

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.3 賦值時使用引號
符號 說明
雙引號 允許通過$符號引用其他變數值
單引號 禁止引用其他變數值, $視為普通字元
反撇號 命令替換,提取命令執行後的輸出結果

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值均表示執行出現異常