shell-語句總結

shell腳本語法總結

過程式編程語言:

順序執行
選擇執行
循環執行

shell默認是順序執行,如果有判斷或循環語句則執行判斷或循環。

條件判斷

if
    單分支
        if 判斷條件:then
            條件為真的分支代碼
        fi

    雙分支
        if 判斷條件; then
            條件為真的分支代碼
        else
            條件為假的分支代碼
        fi

    多分支
    if CONDITION1; then
        if-true
    elifCONDITION2; then
        if-ture
    elifCONDITION3; then
        if-ture
        ...
    else
        all-false
    fi
    逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句
    if取的是判斷語句的運行狀態返回值。true or false

case
    case 變量引用 in
        PAT1)
            分支1
            ;;
        PAT2)
            分支2
            ;;
        ...
        *) #任意長度任意字符 (最終會匹配的條件)可以不寫這個條件
            默認分支
            ;;
        esac
    =====================================================
    pat)通配模式

        case支持glob風格的通配符:
            *: 任意長度任意字符
            ?: 任意單個字符
            []:指定范圍內的任意單個字符
            a|b: a或b

注case 分支語句要用雙分號結尾。
case中的patter后的分支語句通過golb通配case引用的變量,匹配則執行分支語句。不匹配則往下執行。

循環

for
    for循環  循環條件是列表不為空,列表中的數據用完則循環結束

        for 變量名in 列表;do
            循環體
            ..
        done

    執行機制:
        依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束

while
    while CONDITION; do

        循環體
        done

    CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環 
    因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
    進入條件:CONDITION為true;    
    退出條件:CONDITION為false

until
    ntil循環  條件為假時開始循環,條件為真時結束循環。

    until CONDITION; do
            循環體
    done

    進入條件:CONDITION 為false
    退出條件:CONDITION 為true
    CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

continue

用于循環體中---提前中斷循環體的本輪運行
continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層

while CONDTIITON1; do
    CMD1
    ...
    if CONDITION2; then
        continue
    fi
    CMDn
    ...
done

break—跳出循環 ,并停止整個循環。默認是1

break 后可以加數字 --用于循環體中,可以指定跳出那一層循環(存在嵌套循環)。

break [N]:提前結束第N層循環,最內層為第1層

    while CONDTIITON1; do
    CMD1
    ...
    if CONDITION2; then
    break
    fi
    CMDn
    ...
done

創建無限循環

while true; do5
    循環體
done

until false; do
    循環體
Done

exit

只要在腳本中出現exit則腳本退出執行。
如果在腳本的子shell中出現exit則退出子shell腳本運行。

交互–用戶輸入

select 屬于循環語句
select variable in LIST
        do
            循環體命令
        done

    運行后,用戶按提示(根據in后面的列表生成的菜單)輸入選擇,則將select將后面的變量名賦值為對應的in列表中的值。
    elect 循環主要用于創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,并顯示PS3 提示符,等待用戶輸入
    用戶輸入菜單列表中的某個數字,執行相應的命令
    用戶的輸入 被保存在內置變量REPLY 中。

    常配合case使用



read
使用read來把輸入值分配給一個或多個shell變量:
    -p指定要顯示的提示
    -t TIMEOUT
    read從標準輸入中讀取值,給每個單詞分配一個變量
    所有剩余單詞都被分配給最后一個變量
    read -p “Enter a filename:“ FILE

函數

函數function是由若干條shell命令組成的語句塊
實現代碼重用
模塊化編程
機構化編程
把獨立功能的代碼當作一個整體,并為之一個名字;命名的代碼段,此即為函數;

函數命名應盡量避免與命令或系統關鍵字重名。命名法則與變量相同  

語法一:

        function f_name{
        ...函數體...
        }

    語法二:(常用)

        f_name() {
        ...函數體...
        }

函數的使用
    函數的定義和使用:
        可在交互式環境下定義函數
        可將函數放在腳本文件中作為它的一部分
        可放在只包含函數的單獨文件中,使用source或點號調用函數文件。

    調用:函數只有被調用才會執行;
        再腳本中調用:給定函數名;函數名出現的地方,會被自動替換為函數代碼
        交互式環境下,注銷函數 使用 unset 函數名 

函數支持位置參數變量和特殊變量;在腳本中,腳本的位置參數變量和特殊變量與其內部函數的位置參數變量和特殊變量不是同一變量,注意區別開
注:函數放在調用函數的代碼之前,定義代碼段不執行,調用才執行。一般都放到腳本的前面先定義好函數。下面在調用。

return

定義腳本最后一條命令的返回值,多用于給函數定義
例如函數內部有條件判斷語句,不同情況下,每個語句都有執行成功的可能。這樣可以給每中情況定義不同的狀態返回值。

local

定義局部變量
多用于函數內部的變量定義。定義后該變量只在該函數體內部生效。

特殊用法

while循環的特殊用法(遍歷文件的每一行):

    while read line; do         ##read 與用戶交互命令 line是個變量可以自定義名稱。
    循環體                         ##處理的內容為line這個變量的內容(文本中的一行)。
    done < /PATH/FROM/SOMEFILE  #使用標準輸入重定向輸入文檔。

依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line
練習

掃描/etc/passwd文件每一行,如發現GECOS字段為空,則填充用戶名和單位電話為62985600,并提示該用戶的GECOS信息修改成功。




雙小括號方法,即((…))格式,也可以用于算術運算等于 let EXPRESSION

雙小括號方法也可以使bash Shell實現C語言風格的變量操作
    #I=10
    #((I++))

for循環的特殊格式: help for

    for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
    do
        循環體
    done

    控制變量初始化:僅在運行到循環代碼段時執行一次,一次循環時初始化變量

    控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,而后再做條件判斷

    條件判斷表達式,可以寫的非常簡單。 i<=100即可

    括號內中的內容需要用分號隔開。

    例如for (( i=0;i<=100;i++));do
            let sum+=$i
        done
        echo "$sum"


for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
Arithmetic for loop.

Equivalent to
    (( EXP1 ))
    while (( EXP2 )); do
            COMMANDS
            (( EXP3 ))
    done
EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is
omitted, it behaves as if it evaluates to 1.

Exit Status:
Returns the status of the last command executed.

原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/38472

(0)
yywyyw
上一篇 2016-08-21 20:45
下一篇 2016-08-21 20:45

相關推薦

  • CentOS系統啟動流程、selinux、Systemd剖析

    交互式登錄配置文件讀取順序: /etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc 非交互式登錄配置文件讀取順序: ~/.bashrc –> /etc/bas…

    Linux干貨 2018-03-04
  • ###N25-Bazinga-第一周作業

    ###N25-Bazinga-第一周作業— 1,描述計算機的組成及其功能         計算機基本組成有五部分:     計算機的主要組成部分可以歸納為以下五個部分:控制器、運算器、存儲器、輸入設備、和輸出…

    Linux干貨 2016-12-06
  • LAMP組合的編譯安裝(apache2.4+mariadb5.5+php5.6)

    安裝次序 httpd, MariaDB, php 安裝apache2.4 [root@root ~]# yum groupinstall "Development Tools" "Server Platform Develoment "&n…

    Linux干貨 2016-06-29
  • vim簡單操作

    vim第一講 光標在屏幕文本中的移動既可以用箭頭鍵,也可以使用 hjkl 字母鍵。 h (左移) j (下行) k (上行) l (右移) 欲進入 Vim 編輯器(從命令行提示符),請輸入:vim 文件名 <回車> 欲退出 Vim 編輯器,請輸入 <ESC> :q! <回車> 放棄所有改動。 或者輸入 <ESC&gt…

    Linux干貨 2017-07-29
  • 顯示列表和復制文件的各種實例

    顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。 [root@localhost tmp]# ls -d /var/l*[[:lower:]] 顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。 [root@localhost tmp]# ls -d /etc/[0-9]*[^0-9…

    Linux干貨 2018-03-01
  • vim文本編輯器

    Vim文本編輯器不能單獨編寫二進制文件,但是可以配合xxd命令編輯二進制文件 1、文本編輯種類: 行編輯器: sed 全屏編輯器:nano, vi、vim(其是改進的vi) 其他編輯器: Gedit,一個簡單的圖形編輯器 Gvim,一個Vim編輯器的圖形版本 2、打開文件 用法#vim  [OPTION]… FILE… +#…

    Linux干貨 2016-08-15
欧美性久久久久