Shell基本入門(二)

Shell基本入門(二)

1、while語句:

Shell腳本提供了while命令,用於創建類似於C語言編程中while語句一樣的循環,使用
格式:
while [ condition ]
do
Commands
done

另外,while命令允許在while語句行定義多條test命令,只有最後一條測試命令的退出狀態
是用來決定循環是何時停止的

2、until語句:

until命令剛好與while命令相反,一旦測試條件返回0,循環停止,使用格式:
until [ condition ]
do
Commands
done

3、shift命令

使用shift命令時,默認是將每個參數變量左移一位,可選擇左移第三位,移動後參數丟失,不可恢復
EG: shift 2

4、read命令

read命令接受標準輸入的輸入,或其它文件描述符的輸入,得到輸入後,將其放在一個變量中
使用選項p允許在read命令行中直接指定一個提示
read name
EG: read -p “please input your name:” name

使用read命令存在潛在危險,腳本很可能會停下來一直等待腳本用戶輸入數據,使用選項t可以
指定一個計時器(s),等計時器計時數滿時,read命令返回一個非零退出命令

if read -t 25 -p “please input your name: ” name

使用選項n,後接一個數值,表示當輸入的字符數目達到預定數目時,自動退出,不需回車鍵
if read -t 25 -n1 -p “do you want to continue [Y/N]?” answer

使用選項s,能夠使read命令中輸入的數據不顯示在監視器上(實際上,數據是顯示的,只是read
命令將文本顏色設置成了與背景相同的顏色)
read -s -p “Enter your password: “ pass

5、exec命令

永久重定向,通知shell在腳本執行期間重定向特定的文件描述符
exec 1>testout

保存文件描述符,例如,在重定向到文件之前,將STDIN文件描述符位置保存到另一個文件描述符, 然後在完成了文件讀取操作後,將STDIN恢復爲原來的位置
exec 6<&0 exec 0< testfile … exec 0<&6

關閉文件描述符 exec 3>&-

6、trap命令

trap命令可以指定能夠通過shell腳本監控和攔截的Linux信號,由它來處理這些信號,使用格式:
trap commands signals
trap “echo HAHA” SIGINT SIGTERM trap “echo byebye” EXIT

移除捕獲 trap - EXIT

7、函數

在bash shell腳本中創建函數可以使用兩種格式,一種格式是使用關鍵字function:
function name{
commands }

另外一種格式,它更接近一般編程語言定義函數的方式:
name(){
commands }

向函數傳遞參數:函數可以使用標準參數環境變量來表示命令行傳遞給函數的參數:$#,$0,$1…
上述的參數不同於腳本的變量。在腳本中指定函數時,必須在函數所在命令行提供參數:
func1 $value1 10 func1 $1

Shell腳本中的變量默認是全局變量,可以使用local來聲明局部變量
引用庫文件 . ./myfuncs

8、正則表達式

正則表達式認可的特殊字符有:
.*[]^{}+?|()

另外,雖然正斜槓不是正則表達式的特殊字符,但如果在sed編輯器或gawk程序的正則表達式模式
使用它,必須先轉義

反斜槓/:轉義符號

脫字符^:定義從數據流中文本行開頭開始的模式,只要該模式出現在新行的開始位置,脫字符定位符就會捕獲它,如果將脫字符放在模式的其它位置,它就充當普通字符而不再作爲特殊字符

查找結尾$:與在一行開始查找模式(脫字符)相反的是在行尾查找它

聯合定位^KaTeX parse error: Expected group after '^' at position 33: …用來刪除文件中的空行(即使用“^̲”匹配空行)

點字符.:點特殊字符用於匹配除換行符之外的任何單個字符,但點字符必須匹配第一個字符,如果在圓點位置沒有字符,那麼模式匹配失敗

字符類[]:字符類可以定義一類來匹配文本模式的某個位置,如果該字符類中的字符之一在數據流中那它就和模式匹配。在單個表達式中可以使用多個字符類:
EG: echo “Yes” | sed -n ‘/[Yy][Ee][Ss]/p’
echo “Yes” | sed -n ‘/1[Ee]Ss]$/’

否定字符類:在正則表達式模式中,也可以顛倒字符類的作用。不是查找字符類中包含的字符,而是查找不在該字符類中的字符,爲此只需在字符類範圍的開頭添加脫字符
EG: sed -n ‘/[^ch]at/p’ data.txt

使用範圍-:通過使用短劃線可以在字符類中使用一系列字符範圍
EG: sed -n ‘/[a-ch-m]at/p’ data.txt

星號*:在某個字符之後加一個星號表示該字符必須在匹配字符的文本中不出現或出現多次,還可以將星號應用於字符類
EG: sed -n ‘/b[ae]*t/p’ data.txt

問號?:問號與星號相似,但略有變化,問號表示其前面的字符可以不出現或出現一次,但只能是這樣它不匹配重複出現的字符

加號+:加號是與星號相似,但與問號不同的另一個模式符號,加號表示其前面的字符可以出現一次多次,但必須出現至少一次,如果該字符不存在,則模式不匹配

使用大括號:在ERE中可以使用大括號指定對可重複的正則表達式的限制,這通常稱爲間隔,可以使用兩種格式表示間隔:
m:該正則表達式正好出現m次
m,n:該正則表達式出現最少m次,最多n次
EG: sed -n ‘/be{1}/p’ data.txt

管道符號|:管道符號允許你用邏輯OR公式指定正則表達式檢查數據流時使用的兩個或多個模式,如果任何一個模式與數據流文本匹配,該文本通過,如果沒有一個模式匹配,數據流文本失敗
將表達式分組():正則表達式模式也可以使用圓括號分組,在將正則表達式模式分組時,一個組合將作爲一個標準字符處理,可以像將特殊字符應用於正常字符一樣,將特殊字符應用於組合
EG: echo “Sat” | awk ‘/Sat(urdav)?/{print $0}’

9、Sed編輯器

Sed(Stream Editor):流式編輯器又名行編輯器,每次只編輯一行,使用格式如下:
sed [操作選項] ‘命令’ 文件名
(注意:命令是用單引號括起來的,雙引號則可訪問$1、$2等外部的變量)

常用操作選項:(沒有的情況下會全部打印出來)
-n 指定處理後只顯示該行
-e 進行多項編輯任務
-i 直接修改讀取的文件內容,而不是由屏幕輸出

常用命令選項:
p 打印匹配行
a 指定行後新增一行
i 指定行前新增一行
c 替代一行
d 刪除定位行
g 表示用新文本替換現有文本的全部實例
w 表示將替換的結果寫入文件
s 替代一行中的某些部分

10、awk分析器

Awk是一個強大的文本分析工具,它把文件逐行讀入,以空格爲默認分隔符將每行分割爲多 個字段,使用方式:
awk ‘{pattern + action}’ filenames (特別提示:可以用-F指明分隔符)
pattern爲要查找的內容(可以不要)
action爲找到匹配內容時所執行的命令 內容放在{ }裏面

選項 -F fs 指定描繪一行中數據字段的文件分隔符

-v var=value 定義awk程序中使用的變量和默認值

字符變量 $0 表示整行文本
字符變量 $1 表示文本行中的第一個數據字段
字符變量 $n 表示文本行中的第n個數據字段

EG:
last -n 5 | awk ‘{print $1}’
cat /etc/passwd | awk -F ‘:’‘{print $1}’
awk -F ‘:’ ‘$1 == “root” {print $0}’ /etc/passwd $0代表整行


  1. Yy ↩︎

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