【知識儲備】
1.shell腳本文件的后綴業內都默認為sh,所以以后看到以sh結尾的文件名稱基本上就是shell腳本。
2.在寫shell腳本的時候,標准開頭就是
#!/bin/bash
3.shell腳本寫完以后要加執行權限
chmod +x shell腳本名稱
4.執行shell腳本有很多種方式
(1)./shell腳本名稱
(2)sh shell腳本名稱 ##注意這種執行方式,即使不加執行權限也可以執行
(3)shell腳本的全路徑 直接回車,也可以執行
5.shell腳本也可以debug
(1)在 sh執行命令后加 -x 即 是 sh -x shell腳本名稱
(2)在shell腳本里邊的#!/bin/bash的后邊 加上 -x 也可以
【案例一】
echo的作用:打印輸出
1@編輯內容
2@輸出結果
【案例二】
變量定義和引用
1@編輯內容
2@輸出結果
3@總結
(1)反引號的里邊引用的內容一定要是一個命令,用反引號定義的變量是動態變量
(2)引用變量用$,變量要放在{}里邊(其實不放也可以,為了規范,為了不跳坑要加大括號)
(3)K=V 'V' "V" 這種加單引號,雙引號或者啥也不加的變量叫靜態變量
(4)變量定義的=號前后不能有空格(大坑)
【案例三】
傳遞參數
1@編輯內容
2@輸出結果
3@總結
(1)$# 這個程式的參數個數
(2)$* 這個程式的所有參數,此選項參數可超過9個。
(3)$$ 這個程式的PID(腳本運行的當前進程ID號)
(4)$1 和 $2 是需要輸入的參數,$1代表第一個參數,$2代表第二個參數,參數之間的間隔用空格鍵
4@拓展
$0 這個程式的執行名字
$n 這個程式的第n個參數值,n=1..9
$! 執行上一個背景指令的PID(后台運行的最后一個進程的進程ID號)
$? 執行上一個指令的返回值 (顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)
$- 顯示shell使用的當前選項,與set命令功能相同
$@ 跟$*類似,但是可以當作數組用
【案例4】
數組
1@編輯內容
2@輸出結果
3@總結
(1)shell中的數組只支持一維的
(2) arr[@]和arr[*]都代表數組的全部內容
(3)arr[數字] 打印輸出的是對應數組里的內容,注意,數組里的下標是從零開始的
(4) #arr[@] 打印輸出的是數組內元素的個數
(5)數組內元素之間的間隔是用空格分開的,這個在shell中式默認的
【案例5】
if判斷
1@編輯內容
2@輸出結果
3@總結
基本的if條件命令選項有:
- eq —比較兩個參數是否相等(例如,if [ 2 –eq 5 ])
-ne —比較兩個參數是否不相等
-lt —參數1是否小於參數2
-le —參數1是否小於等於參數2
-gt —參數1是否大於參數2
-ge —參數1是否大於等於參數2
-f — 檢查某文件是否存在(例如,if [ -f "filename" ])
-d — 檢查目錄是否存在
幾乎所有的判斷都可以用這些比較運算符實現。
腳本中常用-f命令選項在執行某一文件之前檢查它是否存在。
str1 = str2 當兩個字符串有相同內容、長度時為真
str1 != str2 當字符串str1和str2不等時為真
-n str1 當字符串的長度大於0時為真(串非空)
-z str1 當字符串的長度為0時為真(空串)
【案例6】
循環
1@編輯內容
2@輸出結果
3@總結
(1)在比較大小的時候if (( $i >= 5 )); 這里如果用數學符號,<,=,或者>等等要用雙括號把條件擴起來
(2)如果用- eq、-ne等這種,要用中括號擴起來[]
(3)循環的種類比較多,后期會有補充
【案例7】
分割
1@編輯內容
2@輸出結果
3@總結
(1)OLD_IFS="$IFS"
IFS="," --分割符號是逗號
arr=($S) --把S這個字符串變量轉換成數組
IFS="OLD_IFS"
這里代碼OLD_IFS="$IFS", IFS="OLD_IFS" 這里是固定的,不需問為什么
(2)注意這里的循環就是用了for X in (一組數字),這里是用的數組的形式
【案例8】
取數
1@編輯測試log
2@awk命令輸出結果
【案例9】
替換
1@編輯測試log
2@sed命令輸出結果
3@總結
[root@hadoop001 shell]# sed -i 's/a/aa/' sed.log
[root@hadoop001 shell]# cat sed.log
aa b c
1 2 3
[root@hadoop001 shell]# sed -i 's/aa/aa'/' sed.log
> ^C
[root@hadoop001 shell]# sed -i "s/aa/aa'/" sed.log
[root@hadoop001 shell]#
[root@hadoop001 shell]#
[root@hadoop001 shell]# cat sed.log
aa' b c
1 2 3
[root@hadoop001 shell]# sed -i "s?aa'?bbb?" sed.log
[root@hadoop001 shell]# cat sed.log
bbb b c
1 2 3
[root@hadoop001 shell]# sed -i "s/b/w/" sed.log
[root@hadoop001 shell]# cat sed.log
wbb b c
1 2 3
[root@hadoop001 shell]# vi sed.log
bbb b c
1 2 3
全局替換
[root@hadoop001 shell]# sed -i "s/b/w/g" sed.log
[root@hadoop001 shell]# cat sed.log
www w c
1 2 3
前面加
[root@hadoop001 shell]# sed -i "s/^/uuu&/g" sed.log
[root@hadoop001 shell]# cat sed.log
uuuwww w c
uuu1 2 3
后面加
[root@hadoop001 shell]# sed -i "s/$/&uuu/g" sed.log
[root@hadoop001 shell]#
[root@hadoop001 shell]# cat sed.log
uuuwww w cuuu
uuu1 2 3uuu
大數據壓縮格式詳解
https://www.cnblogs.com/yurunmiao/p/4528499.html