shell腳本是什麼呢?簡單來說,它就是許多命令的一個集合;Shell腳本是一個面向過程的編程語言,它是通過解釋器來解釋運行腳本里的每一條命令;
面向過程的編程語言的元素:變量、數組、流程、函數
下面就來學習一下Shell腳本吧!
一.變量
變量:可以理解它爲一個命名的內存空間,裏面的數據是可變的
1.變量命名法則:
(1).只能使用數字、字母或下劃線,而且不能以數字開頭
(2).不能使用系統中的關鍵字:比如if,elif,fi,then,for...等
(3).見名知義
2.變量類型
(1).本地變量:只對當前Shell進程有效,對當前shell之外的其它shell(包括其父shell,子shell等)都無效
(2).環境變量:對當前shell進程及子shell進程有效
(3).局部變量:僅在當前shell進程中的某段代碼空間內有效,通常用於函數內的變量
(4).位置變量:表示參數在傳遞過程中所在的位置,比如:$0表示shell腳本自身,$1表示第一個參數,$2表示第三個參數……
(5).特殊變量:表示特殊作用的變量,比如:$?表示上一個命令執行成功與否的狀態值,$#表示參數個數,$@和$*表示所有參數的集合
3.聲明變量並賦值
(1).本地變量
無須聲明,直接賦值即可被調用
VAR_NAME=VALUE
(2).環境變量
export VAR_NAME=VALUE或declare -x VAR_NAME=VALUE
可以使用以下命令查看當前shell中的環境變量:
env
export
printenv
(3).局部變量
local VAR_NAME=VALUE
(4).只讀變量
readonly VAR_NAME=VALUE或declare -r VAR_NAME=VALUE
只讀變量一旦被賦值後,不能再次被賦值
(5)整型變量
let VAR_NAME=VALUE或declare -i VAR_NAME=VALUE
注:查看當前已定義的所有變量可以用以下命令:
set
略……
(6)幾個高級的變量賦值:
${var:-word}:表示如果var爲空或未設置,那麼返回word;否則,則返回
${var:=word}:表示如果var爲空或未設置,那麼返回Word;並且將word賦值給var;否則返回var中的值
${var:?err_info}:表示如果Var爲空或未設置,那麼返回錯誤 信息err_info;否則,則返回Var自身的值
${var:+word}:表示如果var變量已設置,則返回word;否則,返回var值
4.變量引用
${VAR_NAME}
5.變量撤消
unset VAR_NAME
注:環境變量不能被撤消
二.數組
數組:是一個連續的多個獨立的內存空間,每個內存空間相當於一個變量,只是將許多變量組合起來形成一個集合
1.數組聲明
declare -a ARRAR_NAME
2.數組元素
數組元素即是數組集合中的一個個成員,每個成員都是由數組名加索引編號組成,編號從0開始,比如:array[0],array[1]……
3.數組賦值
(1)一次只賦值一個元素
ARRAY[index]=VALUE
(2)一次賦值全部元素
ARRAY_NAME=("red" "black" "white")
(3)指定索引號進行賦值
ARRAY=([0]="red" [1]="black" [3]="white")
(4)交互式賦值
read -a ARRAY_NAME
4.引用數組元素
(1)指定元素編號
${ARRAY[index]}
(2)獲取全部元素值
${ARRAY[*]}或${ARRAY[@]}
(3)數組元數個數:
${#ARRAY[*]}或${#ARRAY[@]}
(4)指定元素偏移值獲取元素值
${ARRAY[@]:offset:number}
例如,對於數組a2偏移一個,取後面兩個:
(5)向數組中追加一個元素
ARRAR[${#ARRAR[@]}]
例如,向a2數組中添加一個元素:
三.字符串
(1).字符串切片
${var:offset:lenth} :對Var字串偏移取出字符
${var: -lenth}:取出var字串最後的幾個字符,注:冒號之後要有空格
(2).基於模式切割字符串
${var#*word}:word可以是指定的任意字符,表示自左而右,查找var變量,刪除從首字符至首次出現與word匹配的字符之間的所有字符
${var##*word}:word可以是指定的任意字符,表示自左而右查找Var變量,刪除從首字符至最後一次出現與Word匹配的字符之間的所有字符
${var%word*}:word可以是指定的任意字符,表示自右而左查找,刪除最後一個字符至首次匹配到的字符之間的所有字符
${var%%word*}:word可以是指定的任意字符,表示自右而左查找,刪除最後一個字符至最後一次匹配到的字符之間的所有字符
(3)查找並替換
${var/pattern/substi}:查找var所表示的字串中,第一次被pattern匹配到的字串,並以substi替換之
${var//pattern/substi}:查找Var所表示的字串中,全局替換
${var/#pattern/substi}:行首錨定查找並替換
${var/%pattern/substi}:行尾錨定查找並替換
(4)查找並刪除
${var/pattern}:刪除第一次被pattern匹配到字符
${var//pattern}:全局匹配並刪除
${var/#pattern}:行首匹配並刪除
${var/%pattern}:行尾匹配並刪除
(5)字符串大小寫轉換
var=VALUE
${var^^} :所有小寫字符轉換成大寫字符
var=VALUE
${var,,}:所有大寫字符轉換成小寫字符