shell程式設計規範與變量
- 一、shell腳本概述
-
- 1.shell的簡述
- 2.shell腳本的概念
- 3.shell的作用
- 4.Linux中有哪些Shell?
- 5.shell腳本的構成
- 二、開始編寫你的第一天shell腳本
-
- 1.執行腳本的三種方法
-
- 方法一: 指定路徑的指令,要求檔案必須有x權限。
- 方法二:指定Shell來解釋腳本,不要求檔案必須有x權限。
- 管道操作指令 |
- 2.重定向操作指令
-
- 互動式硬體裝置
- 3.重定向操作
- 三、深度解析shell腳本變量
-
- 1.變量的作用
- 2.變量的分類
- 3.自定義變量
- 4.變量指派的特殊操作
- 5.從鍵盤輸入内容為變量指派
- 6.設定變量的作用範圍
- 7.數制變量的運算
- 四、特殊變量
-
- 1.環境變量
- 2.隻讀變量
- 3.位置變量
- 4.預定義變量
一、shell腳本概述
1.shell的簡述
什麼是Shell?就是與核心溝通的界面、應用程式、KDE等等。比如你要播放音樂,你的計算機通過你在Shell輸入的打開音樂的指令,Shell在告訴作業系統的核心使用者希望打開音樂,核心在通過cpu排程、記憶體管理、磁盤輸入輸出等工作,将硬體調動,這時硬體聲霸卡才會工作,硬體才是實際的工作者。
Shell ( 殼程式)是一個特殊的應用程式,它介于作業系統核心與使用者之間,充當了一一個“指令解釋器”的角色,負責接收使用者輸入的操作指令(指令)并進行解釋,将需要執行的操作傳遞給核心執行,并輸出執行結果。
2.shell腳本的概念
1.将要執行的指令按順序儲存到一個文本檔案
2.給該檔案可執行權限
3.可結合各種Shell控制語句以完成更複雜的操作
3.shell的作用
1.即指令解釋器,“翻譯官”
2.介于系統核心與使用者之間,負責解釋指令行
3.接收使用者輸入的操作指令并進行解釋,之後将需要執行的解釋傳遞給核心執行并輸出結果
4.登入後預設使用shell程式,一般為/bin/bash
5.不同的Shell的内部指令,運作環境等會有所差別
4.Linux中有哪些Shell?
檢查一下/etc/shells這個檔案,裡面就是Li nux所包含的Shell。
最常用的就是bash、tcsh、csh、sh、nologin這些shell。這些shell都是依據Linux發展者的不同所創造出的不同版本。
bash:基準于GNU的架構下發展出的Shell。|
csh: 文法有點類似于c語言的Shell。
tcsh:整合了csh,提供更多的功能。
sh:已經被bash所替換。
nologin:奇怪的shell, 這個shell可以讓使用者無法登入主機。.
注: bash (/bin/bash) 是目前大多數Linux版本采用的預設Shell。
為什麼系統上合法的Shell要寫入/etc/shells這個檔案呢?
這是因為系統某些服務運作過程中,會去檢查使用者能夠使用的Shell,而這些shel1的查詢就是由/etc/shells這個檔案。.
使用者什麼時候可以取得shell來工作?使用者預設會取得哪一個shell?
當使用者登入的時候,系統就會給我一個shell讓我來用, 而這個登入取得的Shell就記在/etc/passwd這個檔案内。
5.shell腳本的構成
1.腳本申明(解釋器) :若第一行為“#!/bin/bash”, 表示此行以下的代碼語句是通過/bin/bash程式來解釋執行
#!/bin/bash為預設解釋器。還有其它類型的解釋器,比如 # !/usr/bin/python、 #!/usr/bin/expect。
2.注釋資訊:以“#”開頭的語句表示為注釋資訊,被注釋的語句在運作腳本時不會被執行。
3.可執行語句:比如echo指令,用于輸出" "之間的字元串
二、開始編寫你的第一天shell腳本
編寫腳本代碼
賦權
一般都是要賦權的,添加可執行權限以確定腳本能正常執行
1.執行腳本的三種方法
方法一: 指定路徑的指令,要求檔案必須有x權限。
chmod +x / root/ first. sh
指定絕對路徑: /root/ first.sh
指定相對路徑: . /first. sh
方法二:指定Shell來解釋腳本,不要求檔案必須有x權限。
sh 腳本路徑: sh first. sh
source 腳本路徑: . first.sh 或者source first. sh .
管道操作指令 |
将管道符号“|”左側的指令輸出的結果,作為右側指令的輸入(處理對象),同一行指令中可以使用多個管道。
2.重定向操作指令
shell腳本的特點是批量自動化處理,且操作過程位于背景,不需要使用者在操作過程中有任何幹預
那麼你怎麼能快速的找到自己想要的資訊呢?這個往往在排錯的時候很關鍵
是以學會提取和過濾執行資訊非常重要!
互動式硬體裝置
标準輸入:從該裝置接收使用者輸入的資料
标準輸出:通過該裝置向使用者輸出資料
标準錯誤:通過該裝置報告執行出錯資訊
類型 | 裝置檔案 | 檔案描述編号 | 預設裝置 |
---|---|---|---|
标準輸入 | /dev/stdin | 鍵盤 | |
标準輸出 | /dev/stdout | 1 | 顯示器 |
标準錯誤輸出 | /dev/stderr | 2 | 顯示器 |
可以改變輸入、輸出内容的方向,而不使用預設的标準輸入、輸出裝置(鍵盤和顯示器),這種操作稱之為“重定向”
3.重定向操作
類型 | 操作符 | 用途 |
---|---|---|
重定向輸入 | < | 從指定的檔案讀取資料,而不是從鍵盤輸入 |
重定向輸出 | > | 将輸出結果儲存到指定的檔案(覆寫原有内容) |
/ | >> | 将輸出結果追加到指定的檔案尾部 |
标準錯誤輸出 | 2> | 将錯誤資訊儲存到指定的檔案(覆寫原有内容) |
/ | 2>> | 将錯誤資訊追加到指定的檔案中 |
混合輸出 | &> | 将标準輸出、标準錯誤的内容儲存到同一個檔案中 |
/ | 2>&1 | 将标準錯誤輸出重定向到标準輸出 |
三、深度解析shell腳本變量
1.變量的作用
用來存放系統和使用者需要使用的特定參數(值)
變量名:使用固定的名稱,由系統預設或使用者定義
變量值:能夠根據使用者設定、系統環境的變化而變化
2.變量的分類
類型 | 解釋 |
---|---|
自定義變量 | 由使用者自己定義、修改和使用 |
環境變量 | 由系統維護,用于設定工作環境 |
位置變量 | 通過指令行給腳本程式傳遞參數 |
預定義變量 | Bash中内置的一類變量,不能直接修改 |
3.自定義變量
自定義變量是由系統使用者自己定義的變量,隻在使用者自己的shell環境中有效,是以又稱為本地變量
在編寫shell腳本的時候,通常會設定一些特定的自定義變量
4.變量指派的特殊操作
指派時使用引号
雙引号:允許通過 符 号 引 用 其 他 變 量 值 單 引 号 : 禁 止 引 用 其 他 變 量 值 , 符号引用其他變量值 單引号:禁止引用其他變量值, 符号引用其他變量值單引号:禁止引用其他變量值,視為普通字元
反撇号:指令替換,提取指令執行後的輸出結果
'…'與$(…)作用一緻
5.從鍵盤輸入内容為變量指派
從鍵盤輸入内容為變量指派
基本格式為:
read [-p “提示資訊”] 變量名
echo $變量名
第二種從鍵盤輸入内容為變量指派
6.設定變量的作用範圍
預設情況下,新定義的變量隻在目前的Shell環境中有效,是以稱為局部變量。當進入子程式或新的子Shell環境時,局部變量将無法再使用
可以通過内部指令export将指定的變量導出為全局變量,使使用者定義的變量在所有的子Shell環境中能夠繼續使用
格式1:export 變量名
格式2:export 變量名=變量值
使用 pstree 指令檢視Shell環境
輸入 bash 指令進入子Shell環境
7.數制變量的運算
格式: expr 變量1 運算符 變量2 [運算符 變量3]
運算符:+加法、一減法、\ *乘法、/除法、%取餘
四、特殊變量
1.環境變量
環境變量由系統提前建立,用來設定使用者的工作環境
使用env指令可以檢視到目前工作環境下的環境變量
常見的環境變量:
PWD、PATH、USER、SHELL、HOME
USER表示使用者名稱
HOME表示使用者的宿主目錄
LANG表示語言和字元集
PWD表示目前所在的工作目錄
PATH表示可執行程式的預設搜尋路徑
2.隻讀變量
3.位置變量
當執行指令行操作時,第一個字段表示指令名或腳本程式名,其餘的字元串參數按照從左到右的順序依次指派給位置變量
$n:n為數字,$0代表指令本身,$1- 9 代 表 帶 一 個 到 第 九 個 參 數 , 十 以 上 的 參 數 需 要 使 用 大 括 号 表 示 , 比 如 第 十 個 參 數 為 9代表帶一個到第九個參數,十以上的參數需要使用大括号表示,比如第十個參數為 9代表帶一個到第九個參數,十以上的參數需要使用大括号表示,比如第十個參數為{10}
4.預定義變量
∗ 、 *、 ∗、@:表示指令或腳本要處理的參數。
$*:把所有參數看成以空格分隔的一個字元串整體,代表"$1 $2 $3 $4"。
$@:把各個參數加上雙引号分隔成n份的參數清單,每個參數是獨立的,代表"$1" “$2” “$3” “$4”。
$0:表示目前執行的腳本或指令的名稱。
$#:表示指令或腳本要處理的參數的個數。
$?:表示前一條指令或腳本執行後的傳回狀态碼,傳回值為0表示執行正确,傳回任何非0值均表示執行出現異常。也常被用于Shell腳本中return退出函數并傳回的退出值。