Shell腳本編程(上)

    Shell腳本編程基礎

Shell 腳本基礎:包含一些命令或聲明并符合一定格式的文本文件
Shell 腳本用途:
        1. 自動化常用命令
        2. 執行系統管理和故障排除
        3. 創建簡單的應用程序
        4. 處理文本和文件

創建Shell腳本:
        首行的固定寫法:
            1. #!/bin/bash      
            2. #!/bin/sh
    注:此行是告訴系統執行的時候要調用什么解釋器。如果首行不寫,那么執行的時候需要使用命令bash。
腳本寫法:
      注釋寫法:
            #!/bin/bash
            #
            #Filename:XXXX.sh        腳本文件名稱
            #Description:xxxx        說明
            #Author:xxxx             作者
            #Email:xxxx@xx.xxx       聯系方式
            #Revision:1.0            版本
            #Date:xxxxx              腳本創建日期
            #Note:xxxx               注解
        Shell腳本編程(上)
    注:每一行之前最好有一個注釋;腳本名稱使用.sh結尾的盡量避免使用中文;#表示注釋,此行不執行。
腳本的執行:
        1. bash
        2. sh
        3. 加執行權限
                1) 相對路徑
                2) 絕對路徑
                3) 放到$PATH變量指定的目錄里面,直接執行(tab)
        腳本調試執行:
                bash -n 檢查語法錯誤,不檢查拼寫錯誤
                bash -x或sh -x 顯示腳本執行的時候每一個命令具體的執行結果

變量:暫時存放數據的地方,一個具有名稱的內存地址空間。
    數據存儲方式:1. 字符
                             2. 數值: 整形、浮點型
    作用:1. 數據存儲格式
              2. 參與的運算
              3.表示的數據范圍
    類型:
          強類型(如 JAVA C#):數值型和字符型不能直接計算,除非顯示把字符型轉換成數值型。

          弱類型(如 shell php):不會嚴格區分變量類型,定義變量的時候不用指定變量類型,默認字符型,如果想要計算的時候會自動幫你轉換成數值型。
變量的命名規則:
        1.不能使用if for bash cd ls date 關鍵字
        2.不能以數字開頭,不能使用特殊符號,只能使用數字、字母及下劃線
        3.見名知意:看見名字知道此文件的意義
        4.建議變量使用大寫
bash變量的種類:
        本地變量(全局變量)  僅僅對當前shell生效
        環境變量    對當前shell以及其他shell都生效 export
        局部變量(私有變量)  生效范圍位當前shell進程中某代碼片段,通常用在函數里面,使用local
本地變量:name=’value’
可以使用引用value:
        1.可以是直接字串:name=”root”
        2.變量引用:name=”$USER”
        3.命令引用:name=COMMAND  name=$(COMMAND)
變量引用:${name} $name
        ” ” :弱引用  會把雙引號里面的變量替換
        ‘ ‘  :強引用  不會把引號里面的變量進行替換
        “ : 把反引號里面的命令執行結果賦值給變量
顯示已定義的所有變量: set
刪除變量: unset name
    注:取消變量和變量置空是兩種不同概念 unset HZ  
                                                                  HZ=   

環境變量:
    變量聲明、賦值:
            export name=VALUE
            declare -x name=VALUE
    變量引用: $name, ${name}
    顯示所有環境變量:
            env, pringtenv, export, declare -x ,set
    刪除: unset name 
    bash有許多內建的環境變量: 
            $PATH 命令的搜尋路徑
            $OLDPWD 前一個工作目錄
            $LANG 目前的工作語系
            $BASH bash的完整路徑名
            $BASH_VERSION Bash的版本
            $HISTCONTROL 控制指令是否存入歷史文件中
            $OSTYPE 顯示系統類型
            $MAIL 存放郵件的文件
            $MAILCHECK 多久檢查一下郵件 
            $PWD 當前路徑
            $SSH_tty 當前登錄的tty
            $SHLVL 當前shell在幾層
            $RANDOM 隨機數
只讀變量:只能聲明,但不能修改和刪除
    聲明只讀變量:readonly name
                            declare -r name
    查看只讀變量: readonly -p
位置變量: 在腳本代碼中調用通過命令行傳遞給腳本的參數
        $1,$2,…: 對應第1、第2等參數,shift [n]換位置
        $0: 命令本身
        $*: 傳遞給腳本的所有參數,全部參數合為一個字符串
        $@: 傳遞給腳本的所有參數,每個參數為獨立字符串。如”$@”用「”」括起來的情況、以”$1″ “$2” … “$n” 的形式輸出所有參數。
        $#: 傳遞給腳本的參數的個數
        注:$@、$*只在被雙引號包起來的時候才會有差異
        set — 清空所有位置變量
算數運算

        1. let num=算數表達式 let r=9+9

Shell腳本編程(上)

        2. var=$[算數表達式] r=$[9+9]

Shell腳本編程(上)

        3. var=$((算數表達式)) r=$((9+9))

Shell腳本編程(上)

        4. expr 8 + 3 (注意要有空格?。?!)

Shell腳本編程(上)

        5. declare -i   r=9+9

Shell腳本編程(上)

         6. bc   計算1-100的和:echo {1..100} | tr ” ” “+” | bc

Shell腳本編程(上)

        注: expr 8 * 8 乘號需要用\轉義,除號不用

    +=,  i+=3等于i=i+3 
    -=,  i-=3等于i=i-3
    =,  i=3等于i=i*3
    /=,  i/=3等于i=i/3
    %=,  i%=3等于i=i%3
   
    i++  先執行 執行完加1 (用的比較多)

    ++i  先加1,再執行

Shell腳本編程(上)

邏輯運算
        true 1   false 0

        1 與 1 = 1
        1 與 0 = 0
        0 與 1 = 0
        0 與 0 = 0

        1 或 1 = 1
        1 或 0 = 1 
        0 或 1 = 1
        0 或 0 = 0

        與的時候 只要有一個為假 那么整個結果就是假的。
        或的時候 只要有一個為真 那么整個結果就是真。

        !1 = 0
        !0 = 1

        && 與
        || 或

        1 && 1 = 1
        1 && 0 = 0
        1 || 1 = 1
        1 || 0 = 1

        命令執行成功 我們認為是真 
        命令執行失敗 我們認為是假

短路預算:

        命令1 && 命令2  

        命令1 成功執行 則執行命令2

        命令1 執行失敗 則不會執行命令2

        命令1 || 命令2  

        命令1成功執行,則命令2不執行

        命令1執行失敗,則命令2執行

        命令1 && 命令2 || 命令3
        如果命令1 成功執行 則執行命令2 且命令3不會執行
        如果命令1 執行失敗 那么命令2就不會執行,則命令3執行
 
        如果  命令1 成功
         則    命令2;
        否則  命令3;
退出狀態
       使用$?  0代表前面一個命令執行成功
                    非0 代表前面一個命令執行失敗
                    可以在腳本里面自定義退出狀態

        根據退出狀態來判斷一個命令的執行成功與否

    exit [n]:自定義退出狀態碼
        注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出狀態取決于exit命令后面的數字
        注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決于腳本中執行的最后一條命令的狀態碼

測試條件
        test  測試條件
        [ 測試條件 ]
        [[ 測試條件 ]] 條件測試的前后要加上空格
                 生產環境建議使用兩個中括號

   
數值測試:
        -gt: 是否大于
        -ge: 是否大于等于
        -eq: 是否等于
        -ne: 是否不等于
        -lt: 是否小于
        -le: 是否小于等于

    [[ 6 > 2 ]] && echo “OK”

字符串測試
        == 是否等于
        >  是否大于
        <  是否小于
        != 是否不等于
        =~ 左邊的字符串是否包含右邊指定的字符串
        注:此表達式一般用于[[ ]]中;擴展的正則表達式
        -z 測試字符串是否為空,空為真,不空為假
        -n 測試字符串是否不為空,不空為真,空為假
        注:用于字符串比較時的用到的操作數都應該使用引號

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

(0)
木
上一篇 2017-04-16
下一篇 2017-04-16

相關推薦

  • 馬哥教育網絡班21期-第7周課程練習

    第7周課程練習 創建一個10G分區,并格式為ext4文件系統; 添加一塊硬盤sdb 要求其block大小為2048,       預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; # mke2fs -t ext4 -b 2048 -L 'MYDATA' -m 2 # mount -o ac…

    Linux干貨 2016-10-09
  • Linux系統中文件權限(特殊權限)的相關認識

    文件屬性 在linux系統中一切皆文件,所有的數據都是以文件的形式存儲在系統中,我們可以通過ls命令可以查看文件的相關屬性,如下圖:                                &n…

    Linux干貨 2016-08-04
  • DevOpsDays大會,818坐標上海,我們來啦?。。?

    DevOpsDays 818, 坐標上海, DevOpsDays上海大會, 我們來啦?。?! 我們來啦?。?! 我們來啦?。?! 重要的事情說三遍。 標簽: 運維  移動開發  IT技術  DevOps  2008年的敏捷會議上,Andrew Clay Shafer 和 Patrick Debois 討論了關于“敏…

    Linux干貨 2017-08-10
  • Shell運算符

    Bash 支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。 原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。 expr 是一款表達式計算工具,使用它能完成表達式的求值操作。 例如,兩個數相加: #!/bin/bash val=`expr 2 + 2` echo …

    Linux干貨 2017-04-18
  • 網絡知識及寫腳本,一個又一個

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 集線器是屬于物理層的設備,可以理解為一根網線中間串接出了多個接口,這么多接口共享這一根網線的帶寬, 因此這些接口上的設備在使得網絡時就會出現沖突,或者‘道路’擠占的情況。(所有的設備在一個廣播域,沖突域中),集線器現在很少使用了。 交換機、網橋都是數據鏈路層的設備,網橋的出現就是…

    2017-02-10
  • gitlab-ce白名單設置杜絕并發數過大引起的封ip故障

    gitlab-ce 7.9安裝手札以及上篇文章的問題解決 鳴謝 感謝ruby大神===》章魚的一路指點,才能撥開迷霧見云天! 章魚大人:     國內Ansible部落原創翻譯之一!     資深運維!     ROR大神!  &…

    Linux干貨 2015-09-06

評論列表(1條)

  • renjin
    renjin 2017-04-21 11:41

    主要介紹了shell腳本編程的基礎用法,內容總結的非常詳細,但是排版上還需要再注意一下!

欧美性久久久久