詳解Shell編程規范與變數
- 一、Shell腳本概述
- 1、shell腳本的概念
- 2、shell腳本應用場景
- 3、shell的作用——命令翻譯器,“翻譯官”
- 二、用戶的登錄shell
- 三、shell腳本的構成
- 四、shell腳本的執行
- 方法一:指定路徑的命令,要求檔案必須有執行(x)權限
- 方法二:指定shell來解釋腳本,不要求檔案必須有寫(x)的權限
- ①、sh腳本路徑
- ②、source腳本路徑
- 五、重定向
- 1、重定向——互動式硬體設備
- 2、重定向——重定向操作
- 六、Shell腳本變數
- 1、變數的作用
- 2、變數的分類
- 七、自定義變數
- 1、定義新變數:
- 2、查看變數的值:
- 3、賦值時使用引號
- 4、read命令獲取輸入內容
- ①、方法一:
- ②、方法二:
- 5、變數作用范圍
- 6、整數變數的運算
- 7、浮點運算(需借助bc,awk處理)
- ①、bc
- ②、awk
- 八、環境變數
- 九、只讀變數
- 十、位置變數
- 十一、預定義變數
一、Shell腳本概述
1、shell腳本的概念
- 將要執行的命令按順序保存到一個文本檔案
- 給該檔案可執行權限
- 可結合各種shell控制陳述句以完成更復雜的操作
2、shell腳本應用場景
- 重復性操作
- 互動性任務
- 批量事務處理
- 服務運行狀態監控
- 定時任務執行
3、shell的作用——命令翻譯器,“翻譯官”
- 介于系統內核與用戶之間,負責解釋命令列

二、用戶的登錄shell

三、shell腳本的構成
- 腳本申明(解釋器):若第一行為“#!/bin/bash” ,表示此行一下的代碼陳述句是通過/bin/bash程式來結實執行,#!/bin/bash為默認解釋器,還有其他型別的解釋器,比如#!/usr/bin/python、#!/usr/bin/expect,
- 注釋資訊:以“#”開頭的陳述句表示為注釋資訊,被注釋的陳述句在運行腳本時將不被執行,
- 可執行陳述句:比如echo命令,用于輸出“ ”之間的字串,

四、shell腳本的執行
方法一:指定路徑的命令,要求檔案必須有執行(x)權限

方法二:指定shell來解釋腳本,不要求檔案必須有寫(x)的權限
①、sh腳本路徑

②、source腳本路徑

五、重定向
1、重定向——互動式硬體設備
| 型別 | 設備檔案 | 檔案描述編號 | 默認設備 |
|---|---|---|---|
| 標準輸入 | /dev/stdin | 0 | 鍵盤 |
| 標準輸出 | /dev/stdout | 1 | 顯示幕 |
| 標準錯誤輸出 | /dev/stderr | 2 | 顯示幕 |
2、重定向——重定向操作
| 型別 | 運算子 | 用途 |
| 重定向輸入 | < | 從指定的檔案讀取資料 |
| 重定向輸出 | > | 將標準輸出結果 保存 到指定的檔案,并且覆寫原有內容 |
| >> | 將標準輸出結果 追加 到指定的檔案的尾部,不覆寫原有內容 | |
| 標準錯誤輸出 | 2> | 將錯誤資訊 保存 到指定的檔案,并且覆寫原有內容 |
| 2>> | 將錯誤資訊 追加 到指定的檔案的尾部,不覆寫原有內容 | |
| 混合輸出 | &> | 將標準輸出、標準錯誤保存到同一檔案中 |
| 2>&1 | 將標準錯誤輸出重定向到標準輸出 |


六、Shell腳本變數
1、變數的作用
- 用來存放系統和用戶需要使用的特定引數(值)
- 變數名:使用固定的名稱,由系統預設或用戶定義
- 變數值:能夠根據用戶設定、系統環境的變化而變化
2、變數的分類
- 自定義變數:由用戶自己定義、修改和使用
- 環境變數:由系統維護,用于設定作業環境
- 只讀變數:用于變數值不允許被修改的情況
- 位置變數:通過命令列給腳本程式傳遞引數
- 預定義變數:bash中內置的一類變數,不能直接修改
七、自定義變數
1、定義新變數:

- 命名規則:以字母或下劃線開頭,區分大小寫(建議大寫)
2、查看變數的值:

3、賦值時使用引號
| 雙引號 | 允許通過$符號參考其他變數值 |
| 單引號 | 禁止參考其他變數值, $視為普通字符 |
| 反撇號 | 命令替換,提取命令執行后的輸出結果,``和$(…)作用相同 |

4、read命令獲取輸入內容
①、方法一:
read -p "提示資訊" 變數名
echo $"變數名"

②、方法二:
echo -n "提示資訊"
read 變數名
echo $變數名


5、變數作用范圍
- 默認情況下,新定義的變數只在當前的Shell環境中有效,因此稱為區域變數,當進入子程式或新的子Shell環境時,區域變數將無法再使用,
- 可以通過內部命令export將指定的變數匯出為全域變數,使用戶定義的變數在所有的子Shell環境中能夠繼續使用,
- 格式1:export 變數名
- 格式2:export 變數名=變數值
- 可以使用 pstree 命令查看Shell環境,輸入 bash 命令進入子Shell環境,按Ctrl+D組合鍵或輸入 exit 命令退出子Shell環境,


6、整數變數的運算
格式:expr 變數1 運算子 變數2 (運算子 變數3)
運算子: + 加法、- 減法、* 乘法、/ 除法、% 取余
常用的運算運算式:
i=$(expr 10 \* 3)
i=$((10 * 3))
i=$[10 * 3]
let i=10*3
i++ 相當于 i=$[$i+1]
i-- 相當于 i=$[$i-1]
i+=2 相當于 i=$[$i+2]
7、浮點運算(需借助bc,awk處理)
①、bc


②、awk


八、環境變數
- 使用 env 命令可以查看到當前作業環境下的環境變數
- 變數USER表示用戶名稱,HOME表示用戶的宿主目錄,LANG表示語言和字符集,PWD表示當前所在的作業目錄,變數PATH表示可執行程式的默認搜索路徑,

九、只讀變數
- 用于變數值不允許被修改的情況

十、位置變數
- 當執行命令列操作時,第一個欄位表示命令名或腳本程式名,其余的字串引數按照從左到右的順序依次賦值給位置變數,
- $n:n為數字,$0代表命令本身,1~9代表第一個到第九個引數,十以上的引數需要使用大括號表示,比如第十個引數為 ${10},


十一、預定義變數
$*、$@:表示命令或腳本要處理的引數,
$*:把所有引數看成以空格分隔的一個字串整體,代表"$1 $2 $3 $4",
$@:把各個引數加上雙引號分隔成n份的引數串列,每個引數是獨立 的,代表"$1" "$2" "$3" "$4",
$0:表示當前執行的腳本或命令的名稱,
$#:表示命令或腳本要處理的引數的個數,
$?:表示前一條命令或腳本執行后的回傳狀態碼,回傳值為0表示執行正確,回傳任何非0值均表示執行出現例外,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266028.html
標籤:其他
