關于腳本
編寫腳本中出現的三種錯誤
1.語法錯誤bash-n 檢查語法錯誤只是檢查并不執行 語法錯誤之后命令不會再執行
Cat - A查看有無特殊符號語法錯誤
Cat -n列行
- 邏輯錯誤 后續命令仍會執行
bash-x 逐行執行 每一行命令都會顯示出來
Cat test .txt在腳本中加測試代碼每隔一段輸出出來一次
- 命令錯誤 仍然會執行后續命令
也是用bash-x命令
關于變量:
變量類型大致分為:環境變量 內置變量 只讀變量 位置變量 退出狀態碼變量 以及自定義變量
1)環境變量:環境變量:
可以使子進程(包括孫子進程)繼承父進程的變量,但是無法讓父進程使用子進程的變量
一旦子進程修改從父進程繼承的變量,將會新的值傳遞給孫子進程
一般只在系統配置文件中使用,在腳本中較少使用
變量聲明及賦值:#聲明并賦值
export name=VALUE
declare -x name=VALUE
變量引用:$name ${name
注意 :變量的值加不加單引號雙引號并無區別 但是等號前后不能帶空格 如TITLE=cto
顯示出變量的值 echo $TITLE echo后面必須加$否則 echo認為后面的是字符串進行輸出
變量value的值可以是多種結果
我們可以把一個變量的值賦給另一個 如NAME=$TITLE
腳本中的變量只在腳本中使用 在
子進程的變量在父進程或者其他地方是看不到的
Echo 兩個變量的時候 中間不能添加下劃線否則 echo認為是一個整體只會輸出一個變量
Env顯示環境變量
$?的值是由最后一條決定的 中間錯誤不會影響顯示
2)只讀變量:只讀變量:只能聲明定義,但后續不能修改和刪除,即常量
3)聲明只讀變量:
readonly name
declare -r name
查看只讀變量:readonly [-p]
declare -r
4)位置變量 ;位置變量:在bash shell中內置的變量, 在腳本代碼中調用通過命令行傳遞給腳本的參數
5)退出狀態碼變量:當我們瀏覽網頁時,有時會看到下圖所顯示的數字,表示網頁的錯誤信息,我們稱為狀態碼,在shell腳本中也有相似的技術表示程序執行的相應狀態。
關于腳本安全;set 命令實現腳本安全
-u 在擴展一個沒有設置的變量時,顯示錯誤信息, 等同set -o nounset
-e 如果一個命令返回一個非0退出狀態值(失敗)就退出, 等同set -o errexit
-o option 顯示,打開或者關閉選項
顯示選項:set -o
打開選項:set -o 選項
關閉選項:set +o 選項
-x 當執行命令時,打印命令及其參數,類似 bash -x
邏輯運算:
與:與:&:和0相與,結果為0,和1相與,結果保留原值
或::|:和1相或結果為1,和0相或,結果保留原值
非:! ! 1 = 0 ! true ! 0 = 1 ! false
異或:異或的兩個值,相同為假,不同為真。兩個數字X,Y異或得到結果Z,Z再和任意兩者之一X異或,將得出 另一個值Y
短路運算
短路與
CMD1 短路與 CMD2
第一個CMD1結果為 0 (假 ),總的結果必定為0,因此不需要執行CMD2
第一個CMD1結果為 1 (真),第二個CMD2必須要參與運算,才能得到最終的結果
短路或
CMD1 短路或 CMD2
第一個CMD1結果為1 (真),總的結果必定為1,因此不需要執行CMD2
第一個CMD1結果為0 (假 ),第二個CMD2 必須要參與運算,,才能得到最終的結果
短路與跟短路或同時使用的時候必須短路與寫在前面 否則會出現錯誤 會打印兩條命令
花括號跟小括號在組合測試短路與短路或這里使用區別不大 但是要注意{}里面前后都要加空格 以及后面需要加;
條件測試命令 :
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
注意:EXPRESSION前后必須有空白字符
條件測試比數字大小
【】內變量前必須加$ 而且兩個變量必須都是數字
【】兩個變量相比等號前面必須有空格
建議變量加上雙引號引起來
關于() 和 {}
( list ) 會開啟子shell,并且list中變量賦值及內部命令執行后,將不再影響后續的環境, 幫助看:man bash 搜索(list)
{ list; } 不會啟子shell, 在當前shell中運行,會影響當前shell環境, 幫助參看:man bash 搜索{ list; }
組合測試:組合測試條件
2.13.1 第一種方式
說明: -a 和 -o 需要使用測試命令進行,[[ ]] 不支持
范例:
2.13.2 第二種方式
[ EXPRESSION1 -a EXPRESSION2 ] 并且
[ EXPRESSION1 -o EXPRESSION2 ] 或者
[ ! EXPRESSION ] 取反
條件選擇:條件選擇
4.1.1 選擇執行if語句
格式: 單分支 雙分支 多分支
. ~/.bashrc
if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else
COMMANDS; ] fi
多個條件時,逐個條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句
if 語句可嵌套
條件判斷case語句
格式:
case支持glob風格的通配符:
范例:
case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac

浙公網安備 33010602011771號