shell編程規范與變數
- 一、shell腳本
- 1.shell腳本概念:
- 2.shell腳本用用場景
- 3.Shell的作用
- 4.撰寫腳本代碼
- 4.1撰寫腳本
- 4.2賦予執行權限
- 4.3 執行腳本檔案
- 4.4 更完善的腳本構成
- 二、重定向與管道操作
- 1. 重定向
- 2. 管道符號
- 三、變數
- 1. 作用:
- 2. 變數的型別
- 3. 查看變數的值
- 4. 賦值時使用引號等
- 5. read 從鍵盤中獲取變數的值
- 6. echo 的常見用法
- 7. 設定變數的作用范圍
- 8. 整數的運算(四種書寫方式)
- 四、特殊的Shell變數
- 1.環境變數
- 2. 只讀變數
- 3. 位置變數
- 4. 預定義變數
一、shell腳本
是弱編程語言,用戶和記憶體之間的翻譯官,把用戶輸入的指令翻譯成計算機識別的二進制語言
1.shell腳本概念:
- 將要執行的命令按照順序保存到一個文本檔案
- 給該檔案可執行權限(wrx)X執行的權限
- 可結合各種shell控制陳述句以完成更復雜的操作
2.shell腳本用用場景
- 重復性操作:例如寫個for回圈,批量性任務
- 互動性任務 :通過免互動性
- 批量事務處理
- 服務運行狀態監控:例如監控磁盤空間,記憶體使用率,服務的狀態等通過shell腳本定時監控巡檢,(運維常用)
- 定時任務執行
3.Shell的作用
命令解釋器,內核和用戶輸入命令的解釋器
linux 默認bin/bash
- 用戶登錄shell
- 登陸后默認使用的shell程式,很一般為/bin/bash環境,
- 不同shell的內部指令、運行環境會有區別

4.撰寫腳本代碼
4.1撰寫腳本
- 使用vim編輯器
- 每行linux命令按照從上往下的順序讀取

4.2賦予執行權限


4.3 執行腳本檔案
方法一和二必須有執行權限才可以
- 方法一:腳本檔案路徑(相對路徑與絕對路徑)
./ fir666.sh

- 方法二:sh 腳本檔案路徑
sh fir666.sh

前兩個方法不會真正執行,只會顯示結果
- 方法三: source或者直接用.
會執行,會切換到/boot目錄下
source fir666.sh
. fir666.sh


4.4 更完善的腳本構成
- 腳本宣告
- 注釋資訊
- 可執行陳述句
基本規范:
第一行 #!表示使用哪個編譯器(#!后沒有空格,#!usr/bin 表示使用python解釋器)
第二行# 注釋上此腳本干什么的
途中的echo用于提示自己命令執行到哪一步出錯的,因為腳本在執行程序中,從上往下依次執行,并不知曉執行進度,

二、重定向與管道操作
1. 重定向
互動式硬體設備
- 標準輸入:從該設備接受用戶輸入的資料
- 標準輸出:通過該設備向用戶輸出資料
- 標準錯誤:通過該設備報告執行出錯資訊
| 型別 | 設備檔案 | 檔案描述編號 | 默認設備 |
|---|---|---|---|
| 標準輸入 | /dev/stdin | 0 | 鍵盤 |
| 標準輸出 | /dev/stdout | 1 | 顯示幕 |
| 標準錯誤 | /dev/stderr | 2 | 顯示幕 |
| 型別 | 運算子 | 用途 |
|---|---|---|
| 重定向輸入 | < | 從指定的檔案讀取資料,而不是從鍵盤輸入 |
| 重定向輸出 | > | 將輸出結果保存到指定的檔案(覆寫原有內容) |
| 同上 | >> | 將輸出結果追加到指定的檔案尾部 |
| 標準錯誤輸出 | 2> | 將錯誤資訊保存到指定的檔案(覆寫原內容) |
| 同上 | 2>> | 將錯誤資訊追加到指定的檔案中 |
| 混合輸出 | &> | 將標準輸出、標準錯誤的內容保存到同一個檔案中 |
| 同上 | 2>&1 | 將標準錯誤輸出重定向到標準輸出 |
重定向示例:

個人理解:運算子的尖角指向誰,就是往哪里輸入資料

從pass.txt檔案中取密碼放入test66更改的密碼中
“>>”:這個運算子和">"唯一區別就是,它是把結果追加到指定檔案尾部的另起一行
2. 管道符號
將左側的命令輸出結果,作為右側命令的處理物件
示例:
ps aux | wc -l #統計系統行程的總量
cat /etc/passwd | grep sicong
echo "123456" | passwd --stdin sicong #將用戶sicong的密碼改為123456


三、變數
1. 作用:
- 用來 存放系統和用戶需要使用的特定引數
變數名:使用固定的名稱,由系統預設和用戶定義
變數值:能夠根據用戶設定,系統環境的變換而變換
2. 變數的型別
-
自定義變數:由用戶自己定義,修改和使用
-
特殊變數:環境變數,只讀變數,位置變數,預定義變數
-
定義一個新的變數
變數名以字母或下劃線開頭,區分大小寫,建議全大寫
變數名=變數值
3. 查看變數的值
echo $變數名

4. 賦值時使用引號等
雙引號:允許通過$符號參考其他變數值
單引號:禁止參考其他變數值,$視為普通字符
反撇號:命令替換,提取命令執行后的輸出結果,`...`和$(...)作用相同
雙引號:參考變數值,記得把$也放在引號內

反撇號:把反撇號里面執行的結果值提取出來

5. read 從鍵盤中獲取變數的值
read -p "提示資訊" 變數名

read 基本都是寫在腳本當中用來或許鍵盤輸入的值
6. echo 的常見用法
echo -n #表示不換行輸出
echo -e #輸出轉義字符,將轉義后的內容輸出到螢屏上

7. 設定變數的作用范圍
默認情況下,新定義的變數只在當前的Shell環境中有效,因此稱為區域變數,當進入子程式或新的子shell環境時,區域變數將無法再使用
系統環境中的 區域變數可以用export 來把區域提升至全域變數
提升后重啟就失效了,如果想一直使用,則在/etc/profile里輸入
export 變數名=變數值
格式1: export 變數名 #(賦過值得的)
格式2: export 變數名=變數值 # (沒賦過值的)
兩種格式可以混合使用



export rain #匯出為全域變數
bash #進入子環境
echo "$rain"

8. 整數的運算(四種書寫方式)
shell中需要通過運算子才能實作運算,這里用整數的運算子
expr 變數1 運算子 變數2 [運算子變數3]...


四種方式:

四、特殊的Shell變數
1.環境變數
由系統提前創建,用來設定用戶的作業環境
組態檔: /etc/profile、~/.bash_profile
| 路徑名稱 | 具體 |
|---|---|
| PATH | 可執行程式的默認搜索路徑 |
| USER | 用戶名稱 |
| SHELL | 當前的 shell,它的值通常是 /bin/bash |
| HOME | 用戶的宿主目錄 |
| LANG | 語言和字符集 |
echo $PASH #顯示pash路徑變數值,(顯示某個環境變數值,這里的pash可以是其他路徑)
export #設定一個新的環境變數
env #顯示所有的環境變數
unset #清除環境變數
set #顯示本地定義的shell變數和環境變數
echo $PATH #查看當前搜索路徑
PATH="$PATH:/root" #將/root目錄添加到搜索路徑
export PATH="$PATH:/root" #輸出為全域環境變數first.sh



2. 只讀變數
對于一些固定不變且不允許修改的變數,類似與環境變數設定為只讀

3. 位置變數
在執行腳本的同時輸入具體的變數引數
下圖中的$1 $2 $3 表示的是位置變數引數,通過執行腳本時直接賦予


注意:$0 為此腳本本身的名字

10以后的需要加大括號
否則$11 為外面第一個數字 $1 +1
4. 預定義變數
$*、$@:表示命令或腳本要處理的引數,
$*:把所有引數看成以空格分隔的一個字串整體(單字串)回傳,代表"$1 $2 $3 $4"
$@:把各個引數加上雙引號分隔成n份的引數串列,每個引數作為一個字串回傳,代表"$1" "$2" "$3" "$4"
$0:表示當前執行的腳本或命令的名稱,
$#:表示命令或腳本要處理的引數的個數
$?:表示前一條命令或腳本執行后的回傳狀態碼,回傳值為0表示執行正確,回傳任何非0值均表示執行出現例外,也常被用于Shell腳本中return退出函式并回傳的退出值,
$*、$@不加雙引號時表現一致;加雙引號時,$*會將所有引數作為一個整體,
vim bianliang.sh
#!/bin/bash
test() {
echo "未加引號,二者相同"
echo $*
echo $@
echo "加入引號后對比"
for N in "$*"
do
echo $N
echo " "
done
echo "----"
for N in "$@"
do
echo $N
echo " "
done
}
test 12 34 56 78

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