大數據教程(2.7):Linux腳本shell編程入門

    工做中,咱們玩過服務器的人都知道,在linux系統中程序的啓動通常都是經過運行一個Shell腳原本實現的;Shell腳本不光在啓動程序方面有所做爲,在大數據、自動化腳本等方面都是咱們的必備知識之一。Shell腳本究竟是一種什麼樣的語言?能幹啥呢?接下來博主將爲你們詳細講述,並帶領你們深刻到linux編程中一探究竟。linux

1、Shell概念shell

    Shell是用戶與內核進行交互操做的一種接口,目前最流行的Shell稱爲bash Shell;Shell也是一門編程語言<解釋型的編程語言>,即Shell腳本;一個系統能夠存在多個Shell,能夠經過cat /etc/shells命令查看系統中安裝的shell,不一樣的shell可能支持的命令語法是不相同的。express

2、shell入門詳解編程

(1)shell腳本的執行:bash

        第一種:輸入腳本的絕對路徑或相對路徑(首先要賦予+x權限)執行    服務器

                    /root/helloWorld.sh編程語言

                    . /helloWorld.sh編輯器

        

        第二種:bash或sh +腳本執行函數

                    sh /root/helloWorld.sh   工具

                    sh helloWorld.sh

        第三種:在腳本的路徑前再加". ",表示在當前的shell進程中執行(pstree能夠查看進程之間的派生關係)

                    . /root/helloWorld.sh     . ./helloWorld.sh

        區別:第一種和第二種會新開一個bash,不一樣bash中的變量沒法共享。

        擴展知識:pstree命令以樹狀圖的方式展示進程之間的派生關係,顯示效果比較直觀。

        語法:pstree    (選項)

        選項:

                    -a:顯示每一個程序的完整指令,包含路徑,參數或是常駐服務的標示;
                    -c:不使用精簡標示法;
                    -G:使用VT100終端機的列繪圖字符;
                    -h:列出樹狀圖時,特別標明如今執行的程序;
                    -H<程序識別碼>:此參數的效果和指定"-h"參數相似,但特別標明指定的程序;
                    -l:採用長列格式顯示樹狀圖;
                    -n:用程序識別碼排序。預設是以程序名稱來排序;
                    -p:顯示程序識別碼;
                    -u:顯示用戶名稱;
                    -U:使用UTF-8列繪圖字符;
                    -V:顯示版本信息。

        實例:顯示當前全部進程的進程號和進程id

                     pstree -p

                     顯示全部進程的全部詳細信息,遇到相同的進程名能夠壓縮顯示。

                     pstree  -a

          效果圖  

(2)Shell中的變量

         Linux Shell中的變量分爲「系統變量」和「用戶自定義變量」,能夠經過set命令查看全部系統變量

系統變量:$HOME、$PWD、$SHELL、$USER等等

顯示當前shell中全部變量  :    set

(3)定義變量

        STR="hello world"

        A=9

        unset A 撤銷變量

        A readonly B=2 聲明靜態的變量 B=2 ,不能 unset

        export 變量名 可把變量提高爲全局環境變量,可供其餘shell程序使用

(4)將命令的返回值賦給變量

        A=`ls -la` 反引號,運行裏面的命令,並把結果返回給變量A

        A=$(ls -la) 等價於反引號

(5)Shell中的特殊變量

        $? 表示上一個命令退出的狀態
        $$ 表示當前進程編號
        $0 表示當前腳本名稱
        $n 表示n位置的輸入參數(n表明數字,n>=1)
        $#     表示參數的個數,經常使用於循環
        $*和$@ 都表示參數列表 

(6)$*與$@區別

        $* 和 $@ 都表示傳遞給函數或腳本的全部參數,不被雙引號" "包含時,都以$1  $2  … $n 的形式輸出全部參數 

        當它們被雙引號" "包含時,"$*" 會將全部的參數做爲一個總體,以"$1 $2 … $n"的形式輸出全部參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出全部參數

(7)運算符

         格式 :expr m + n 或$((m+n)) 注意expr運算符間要有空格

         例如計算(2 +3 )×4 的值

         分步計算

             S=`expr 2 + 3`   

             expr $S \* 4

         一步完成計算

             expr `expr 2 + 3 ` \* 4     

             echo `expr \`expr 2 + 3\` \* 4`     

             或     $(((2+3)*4))

(8)for循環

            第一種: for N in 1 2 3

                          do   

                          echo $N

                          done

                  或 :for N in 1 2 3;

                          do

                          echo $N;

                          done

                  或 :for N in {1..3};

                         do

                         echo $N;

                         done

            第二種

                        for ((i = 0; i <= 5; i++))
                        do
                        echo "welcome $i times"
                        done
                    或
                        for ((i = 0; i <= 5; i++));   do  echo "welcome $i times";

                        done

(9)while循環

           第一種

                       while expression

                       do command

                        …

                       done

            第二種

                        i=1

                        while ((i<=3))

                        do  

                        echo $i  

                        let i++

                        done

(10)case語句

                  格式 case $1 in

                          start)     

                          echo "starting"     

                          ;;

                          stop)   

                          echo "stoping"     

                            ;;

                          *)   

                          echo "Usage: {start|stop} 「

                          esac

(11)read命令

                read -p(提示語句)-n(字符個數) -t(等待時間)     

                read -p "please input your name: " NAME

                使用示例:   

(12)if判斷

    語法 if condition

                then statements

            [elif condition

                then statements. ..]

            [else

                statements ]

             fi

        if例子

            #!/bin/bash
            read -p "please input your name:" NAME
            #printf '%s\n' $NAME
            if [ $NAME = root ]
            then
                echo "hello ${NAME},  welcome !"
            elif [ $NAME = itcast ]
                then
                        echo "hello ${NAME},  welcome !"
            else
                echo "SB, get out here !"
            fi

(13)判斷語句

        [ condition ] (注意condition先後要有空格)

        #非空返回true,可以使用$?驗證(0爲true,>1爲false)

        [ itcast ]

        #空返回false

         [  ]

         [ condition ] && echo OK || echo notok     條件知足,執行後面的語句           

(14)經常使用判斷條件

    = 字符串比較
    -lt 小於
    -le 小於等於 
    -eq 等於
    -gt 大於
    -ge 大於等於
    -ne 不等於

    -r 有讀的權限
    -w 有寫的權限
    -x 有執行的權限
    -f 文件存在而且是一個常規的文件
    -s 文件存在且不爲空
    -d 文件存在並是一個目錄
    -b文件存在而且是一個塊設備
    -L 文件存在而且是一個連接

(15)Shell自定義函數

注意
    1.必須在調用函數地方以前,先聲明函數,shell腳本是逐行運行。不會像其它語言同樣先預編譯
    2.函數返回值,只能經過$? 系統變量得到,能夠顯示加:return 返回,若是不加,將以最後一條命令運行結果,做爲返回值。 return後跟數值n(0-255)

腳本調試

    sh -vx helloWorld.sh
    或者在腳本中增長set -x
(16)sed命令

sed全稱是:Stream EDitor即流編輯器,是一個很好的文本處理工具,自己是一個管道命令,處理時,把當前處理的行存儲在臨時緩衝區中,接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行。它是以行爲單位進行處理,能夠將數據行進行替換、刪除、新增、選取等特定工做。

sed選項

    -n :使用安靜(silent)模式。在通常 sed 的用法中,全部來自 STDIN 的數據通常都會被列出到終端上。但若是加 上 n 參數後,則只有通過sed 特殊處理的那一行(或者動做)纔會被列出來。
    -e :直接在命令列模式上進行 sed 的動做編輯;
    -i :直接修改讀取的文件內容,而不是輸出到終端。

sed function

    a :新增, a 的後面能夠接字串,而這些字串會在新的一行出現(目前的下一行)
    d :刪除,由於是刪除啊,因此 d 後面一般不接任何內容
    i :插入, i 的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行)
    p :列印,亦即將某個選擇的數據印出。一般 p 會與參數 sed -n 一塊兒運行
    s :取代,能夠直接進行取代的工做!一般這個 s 的動做能夠搭配正規表示法!例如 1,20s/old/new/g

(17)awk命令

    AWK是一種優良的文本處理工具。其名稱得自於它的創始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首個字母,AWK 提供了極其強大的功能:能夠進行樣式裝入、流控制、數學運算符、進程控制語句甚至於內置的變量和函數。它具有了一個完整的語言所應具備的幾乎全部精美特性。實際上 AWK 的確擁有本身的語言:AWK 程序設計語言, 三位建立者已將它正式定義爲「樣式掃描和處理語言」。它容許您建立簡短的程序,這些程序讀取輸入文件、爲數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其餘的功能。

    awk命令格式:awk 'pattern1 {action1} pattern2 {action2} ...' filename

 

    最後:以上是linux中shell編程入門的所有內容;若是你對這塊知識感興趣,請持續關注博主文章,同時歡迎同博主交流。

相關文章
相關標籤/搜索