shell編程學習的9個編程案例及基礎知識


【知識儲備】

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM