linux的shell script


一、第一個script

  ① 編寫習慣

    1)內容與功能 

    2)版本信息

    3)作者與聯絡方式

    4)建檔日期

    5)歷史記錄

  ② hello world程序

    #!/bin/bash

    echo -e "Hello World!! \a \n"

    exit 0

  ③ 運行程序

    sh 程序

二、簡單實例

  ① 讓用戶輸入值,再輸出到屏幕

    read -p “input your firstname” firstname 

    ...

    echo -e "your fullename is : ${firstname} ${lastname}"

  ② 利用data自動創建不同的文檔名

    date1=$(date --date='2 days ago' +%Y%m%d)  前兩天的日期

  ③ 數值運算

    表達方式1:declare -i total=${firstnu}*${secnu}

    表達方式2:total=$((${firstnu}*${secnu}))

 

三、script的執行方式

  ① sh 程序  直接執行,程序會在子程序bash內執行

  ② source 程序  程序在父程序bash內執行

 

四、test指令的測試功能

  ① test  -e  文件  &&  echo  "存在"  ||  echo  “不存在”  判斷文件是否存在及相關屬性

    ($?:返回值,正確為0,錯誤為1)

    -e:該文件是否存在

    -f:該文件是否存在且為 文件(file)

    -d:該文件是否存在且為 目錄

    -r:該文件是否存在且具有 可讀 權限

    -w:該文件是否存在且具有 可寫 權限

    -x:該文件是否存在且具有 可執行 權限

    -u:該文件是否存在且具有 SUID 屬性

    -g:該文件是否存在且具有 SGID 屬性

    -s:該文件是否存在且為 非空文件

  ②  test  文件1 參數  文件2  比較兩個文件

    參數有如下

    -nt:(newer than)判斷文件1是否比文件2新

    -ot:(older than)

    -ef:判斷兩個文件是否為同一個文件,可用在判斷hardlink上,是否都指向同一個inode上。

  ③  test  數值1  參數  數值2  判斷兩個整數

    參數有如下

    -eq:相等(equal)

    -ne:不等(not equal)

    -gt:大於(greater than)

    -lt:小於(less than)

    -ge:大於等於

    -le:小於等於

  ④  判定字符串的數據

    test  -z  string:判定字符串是否為空,若為空,則為true

    test  -n  string:判定字符串是否為非空,若為空,則為false

    test  str1 ==  str2:判定兩個字符串相等,若相等,則為true

    test  str1 !=  str2: 判定兩個字符串不相等,若相等,則為false

  ⑤  多重條件判定

    test  -r  文件  -a  -x  文件

    -a:and

    -o:or

    !:反向狀態

 

五、判斷符號:[ ]  跟test一樣的用法

    [  "$home"  ==  "$samll"  ]  判斷兩個變量是否相同,每個組件都需要有空格鍵分隔,變量要用 雙引號 括起來

 

六、shell script的默認變數($0,$1...)

    ① script的特殊變量如下

      $#:代表后接的參數 個數,返回值如 4(個)

      $@:代表[ "$1" "$2" "$3" "$4" ],每個變量是獨立的

      $*:代表[ "$1n$2n$3n$4" ],n為分隔符,默認空格鍵

        $0:執行的腳本檔名,$1:第1個參數,$2:第2個參數

    ② 栗子:直接在執行命令后面帶上參數

      1) sh  文件  參數1  參數2  參數3

      2) 腳本內容:

          echo  "腳本名稱是:${0}"  

          echo  "有幾個參數:$#"

          echo  "參數內容是:$@"

          echo  "第1個參數是:${1}"

          echo  "第2個參數是:${2}"

七、參數變量號碼偏移(想左移除) shift

    shift [n]  n是數字,可以一次移除幾個參數

 

八、條件判斷式

    ① if  [ 條件判斷式 一] ; then

        執行的代碼

        elif  [條件判斷式二] ; then

        執行的代碼

        else

        執行的代碼

        fi

 

九、case ...in...esac判斷語句   

      case  $變量  in

        "第一個變量內容"

          執行碼

          ;;

        "第二個變量內容"

          執行碼

          ;;

        *

          執行碼

          ;;

      esac

 

十、function(函數)

    function  函數名(){

      執行代碼

    }

 

十一、loop 循環

  ①不定循環

    while [ 判斷式 ]

    do

      執行代碼

    done

      當滿足條件時循環

    until [判斷式]

    do

      執行代碼

    done

      當滿足條件時終止循環

  ②固定循環

    for  變量名  in  變量值1  變量值2  變量值3 ...

    do

      執行代碼

    done

      第一次循環時,變量名的內容為變量值1 。。。

  ③固定循環。 for的另一種寫法

    for (( 初始值;限制值;執行步階 ))  (( i=1;i<=100;i=i+1 ))

    do

      執行代碼

    done

  的

 

十二、shell script的追蹤與debug

  sh  [-nvx]  scripts.sh

    -n:不要執行script,僅查詢語法的問題

    -v:再執行script前,先將scripts的內容輸出到屏幕上

    -x:將使用到的script內容顯示到屏幕上。

 

十三:示例

  參考資料1:https://www.cnblogs.com/luoahong/articles/8456203.html

  常用shell腳本:https://www.cnblogs.com/ysgcs/p/9938832.html

 

十四:自己編寫的shell

  1、當前用戶的角色和目錄路徑

#!/bin/bash
#kentee
#2020/5/5
#實現自動顯示使用者的身份和所在目錄

echo -e "您目前的身份是:$(whoami)"

echo -e "您目前所在的目錄是:$(pwd)"

echo -e "現在的日期是:$(date +%m%d)"
View Code

 

  2、讓用戶輸入生日,計算出生日是否已過

ntee
#2020/5/5
#讓用戶輸入自己的生日(月日),計算出用戶的生日還有幾天。

read -p "請輸入您的生日(幾月幾日,如:0722):" bir
now=`date +%m%d`

bir=10#${bir}
now=10#${now}

if((${bir}==${now}));then
        echo -e "今天是您的生日!祝您生日快樂!!!"
elif ((${bir}<${now}));then
        echo -e "您的生日已經過了哦!祝您新的一年順順利利!!!"
else
        echo -e "您的生日即將到來,好好期待下哦!!!"
fi
~         
View Code

 

 十五:

  1、crontab 定時任務

    參考資料:https://www.cnblogs.com/ftl1012/p/crontab.html

 

  


免責聲明!

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



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