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
下一篇 2016-08-21

相關推薦

  • N25第八周博客作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;     在線的主機使用綠色顯示;     不在線的主使用紅色顯示; #!/bin/bash trap ‘mytrap’ INT mytra…

    Linux干貨 2017-02-26
  • DHCP服務介紹及搭建

    DHCP服務介紹及搭建

    2018-01-16
  • Linux用戶與組之權限管理

    權限(rwx、sst、umask) chown chmod ACL(見下篇) 試驗環境:CentOS 7.2 與CentOS 6.8,具體會在應用場景明確指出 權限 Linux系統對用戶與組的管理,其具體操作手段就是對于權限的分配,而常見的權限分配工具有 rwx, sst, umask, ACL. 跟用戶與組有uid和gid一樣,權限也有…

    Linux干貨 2016-08-07
  • 第四周 N28 (用戶及權限管理及BRE、ERE應用)

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 # cp -r /etc/skel /home/tuser1 # chmod -R og= /home/tuser1 2、編輯/etc/group文件,添加組hadoop。 hadoop:x:1000: 3、手動編輯/etc…

    2017-12-22
  • Linux程序包管理之RPM

    Linux程序包管理之RPM RPM概念 rpm是什么 RPM 是Ret Hat Package Manager(RPM軟件包管理器)的縮寫,遵循GPL協議,可以運行在各種Linux上,公認的行業標準。 rpm干什么 對于終端用戶來說 簡化了Linux系統的安裝、卸裝、更新和升級的過程,用命令完成 對于開發者來說 RPM允許把軟件編碼包裝成源代碼和程序包提供…

    Linux干貨 2016-11-22
  • 運維工程師技能需求排行

    這是我今天在拉勾網搜索運維,翻完了4四頁也招聘信息之后得到的,我的目的是想要看看之后的學習,哪個更應該成為重點,有些在我意料之中,有些還真的沒想到,算是努力了一個小時的收獲吧,分享給大家。
    注意:其中的看法僅代表個人觀點,很多都是依靠我自己的學習經驗和工作經驗累積的

    Linux干貨 2017-12-12
欧美性久久久久