Linux Shell基礎學習(一)

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

clip_p_w_picpath001

(2).環境變量

export VAR_NAME=VALUE或declare -x VAR_NAME=VALUE

clip_p_w_picpath002

clip_p_w_picpath003

可以使用以下命令查看當前shell中的環境變量:

env

export

printenv

(3).局部變量

local VAR_NAME=VALUE

(4).只讀變量

readonly VAR_NAME=VALUE或declare -r VAR_NAME=VALUE

clip_p_w_picpath004

只讀變量一旦被賦值後,不能再次被賦值

(5)整型變量

let VAR_NAME=VALUE或declare -i VAR_NAME=VALUE

clip_p_w_picpath005

注:查看當前已定義的所有變量可以用以下命令:

set

clip_p_w_picpath006

略……

(6)幾個高級的變量賦值:

${var:-word}:表示如果var爲空或未設置,那麼返回word;否則,則返回

clip_p_w_picpath007

${var:=word}:表示如果var爲空或未設置,那麼返回Word;並且將word賦值給var;否則返回var中的值

clip_p_w_picpath008

${var:?err_info}:表示如果Var爲空或未設置,那麼返回錯誤 信息err_info;否則,則返回Var自身的值

clip_p_w_picpath009

${var:+word}:表示如果var變量已設置,則返回word;否則,返回var值

clip_p_w_picpath010

4.變量引用

${VAR_NAME}

clip_p_w_picpath011

5.變量撤消

unset VAR_NAME

clip_p_w_picpath012

注:環境變量不能被撤消

clip_p_w_picpath013

二.數組

數組:是一個連續的多個獨立的內存空間,每個內存空間相當於一個變量,只是將許多變量組合起來形成一個集合

1.數組聲明

declare -a ARRAR_NAME

clip_p_w_picpath014

2.數組元素

數組元素即是數組集合中的一個個成員,每個成員都是由數組名加索引編號組成,編號從0開始,比如:array[0],array[1]……

3.數組賦值

(1)一次只賦值一個元素

ARRAY[index]=VALUE

clip_p_w_picpath015

(2)一次賦值全部元素

ARRAY_NAME=("red" "black" "white")

clip_p_w_picpath016

(3)指定索引號進行賦值

ARRAY=([0]="red" [1]="black" [3]="white")

(4)交互式賦值

read -a ARRAY_NAME

clip_p_w_picpath017

4.引用數組元素

(1)指定元素編號

${ARRAY[index]}

clip_p_w_picpath018

(2)獲取全部元素值

${ARRAY[*]}或${ARRAY[@]}

clip_p_w_picpath019

(3)數組元數個數:

${#ARRAY[*]}或${#ARRAY[@]}

clip_p_w_picpath020

(4)指定元素偏移值獲取元素值

${ARRAY[@]:offset:number}

例如,對於數組a2偏移一個,取後面兩個:

clip_p_w_picpath021

(5)向數組中追加一個元素

ARRAR[${#ARRAR[@]}]

例如,向a2數組中添加一個元素:

clip_p_w_picpath022

三.字符串

(1).字符串切片

${var:offset:lenth} :對Var字串偏移取出字符

clip_p_w_picpath023

${var: -lenth}:取出var字串最後的幾個字符,注:冒號之後要有空格

clip_p_w_picpath024

(2).基於模式切割字符串

${var#*word}:word可以是指定的任意字符,表示自左而右,查找var變量,刪除從首字符至首次出現與word匹配的字符之間的所有字符

clip_p_w_picpath025

${var##*word}:word可以是指定的任意字符,表示自左而右查找Var變量,刪除從首字符至最後一次出現與Word匹配的字符之間的所有字符

clip_p_w_picpath026

${var%word*}:word可以是指定的任意字符,表示自右而左查找,刪除最後一個字符至首次匹配到的字符之間的所有字符

clip_p_w_picpath027

${var%%word*}:word可以是指定的任意字符,表示自右而左查找,刪除最後一個字符至最後一次匹配到的字符之間的所有字符

clip_p_w_picpath028

(3)查找並替換

${var/pattern/substi}:查找var所表示的字串中,第一次被pattern匹配到的字串,並以substi替換之

clip_p_w_picpath029

${var//pattern/substi}:查找Var所表示的字串中,全局替換

clip_p_w_picpath030

${var/#pattern/substi}:行首錨定查找並替換

clip_p_w_picpath031

${var/%pattern/substi}:行尾錨定查找並替換

clip_p_w_picpath032

(4)查找並刪除

${var/pattern}:刪除第一次被pattern匹配到字符

clip_p_w_picpath033

${var//pattern}:全局匹配並刪除

clip_p_w_picpath034

${var/#pattern}:行首匹配並刪除

clip_p_w_picpath035

${var/%pattern}:行尾匹配並刪除

(5)字符串大小寫轉換

var=VALUE

${var^^} :所有小寫字符轉換成大寫字符

clip_p_w_picpath036

var=VALUE

${var,,}:所有大寫字符轉換成小寫字符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章