shell指令碼學習2

2021-07-11 03:29:21 字數 1730 閱讀 3941

前面已經介紹過shell指令碼的基本的使用的方法,在這篇中我將介紹三個字元擷取命令cut和awk以及sed命令。

1    cut命令

cut [選項] 檔名

選項:-f 列號: 提取第幾列 (列號之間用,分開,列號之間是用製表符分開)

-d 分隔符: 按照指定分隔符分割列("分隔符")

cut命令與grep命令經常聯合使用

cut命令預設是以tab製表符為分隔符的

2    awk命令

awk '條件1  條件2 ......'    檔名

條件:一般使用關係表示式作為條件

x > 10 判斷變數x是否大於10

x >= 10 大於等於10

x <= 10 小於等於10

動作:格式化輸出

流程控制語句

eg:檢視根目錄是否超過%80

df -h | grep sdb5 | awk '' | cut -d "%" -f 1

得到根目錄的使用量

除了這裡的用法外,awk還有其它的一些用法:

fs內建變數(使用awk命令時,指定的分隔符)

cat  /etc/passwd | grep "/bin/bash" | awk ' begin   '

awk 'end '  檔名

begin和end命令

begin 是在所有命令執行之前執行的命令

end 是在所有命令執行之後執行的命令

awk命令還支援關係運算子。

3    sed命令

sed是一種幾乎包括在所有unix平台(包括linux)的輕量級流編輯器。sed主要是用來將資料進行選取,替換,新增的命令。

sed [選項]  '[動作]'   檔名

選項:-n      一般sed命令會把所有資料都輸出螢幕,如果加入此選擇,則只會把經過sed命令處理的行輸出的結果

-e     允許對輸入資料應用多條sed命令編輯(命令之間用;隔開)

-i      用sed的修改結果直接修改讀取資料的檔案,而不是由螢幕輸出(可以修改檔案)

動作:a\   追加,在當前行後新增一行或多行,新增多行時,除最後一行外,每行末尾需要用"\"代表資料未完結

c\   行替換,用c後面字串替換原資料行,替換多行時,除最後一行外,每行末尾用"\"代表資料未完結

i\    插入,在當期行前插入一行或多行。插入多行時,除最後一行外,每行末尾需要用"\"代表資料未完結

d   刪除,刪除指定的行

p   列印,輸出指定的行

s   字串替換,用乙個字串替換另外乙個字串。格式為"行範圍s/舊字串/新字串/g" (和vim中的替換格式類似)

sed -n '2p' 檔名 只列印檔案中的第二行

sed '2a hello'  檔名 在第二行後追加

4    排序命令

sort  [選項]   檔名

選項:-f---->忽略大小寫

-n---->以數值型進行排序,預設使用字串排序

-r---->反向排序

-t---->指定分隔符,預設分隔符是製表符

-k n,m---->按照指定的字段範圍排序,從第n欄位開始,m欄位結束(預設到行尾)

再次總結:

最後,我想說的是:

如果有問題,大家可以一起交流和學習

Shell指令碼學習(2)

在執行shell指令碼時,向shell指令碼傳遞引數,獲取引數的格式為 n。其中n表示乙個數字,作為執行指令碼的第n個引數,且n 0。1 bin bash 2 echo shell 傳遞引數例項!3 echo 執行的檔名 0 4 echo 第乙個引數為 1 5 echo 第二個引數為 2 6 ech...

shell指令碼學習 功能語句 2

學習常用功能語句 read expr test read可讀入並傳遞給變數 expr可用於算數運算 test可用於整數 字元 檔案比較,感覺可用於條件判斷。功能 讀入輸入的引數賦值給變數 a 單個輸入 格式 read paramb 多個輸入 多個輸入格式 read param0 param1 par...

shell 指令碼學習

case var in pattern statement esac case 的指令碼語法是雙分號結尾的。sed e s i.86 i386 查詢替換。sed 流編輯器 將輸入流中的i.86替換成i386。是個萬用字元。輸入流的形式可能是 管道,檔案。shell d mkdir p 指令碼的條件執...