天天看點

編寫簡單shell腳本

#編寫shell腳本

##1.編寫簡單腳本

    #!/bin/bash

    #for example by masf

    pwd

    ls -al

###内容簡介:

    第一行 腳本聲明(#!)告訴系統使用哪種shell解釋器執行該腳本

    第二行 注釋資訊(#) 對腳本功能和某些指令的介紹

    第三行開始 寫執行的指令

###執行方式:

    1.bash解釋器運作腳本

    [[email protected] ~]# bash example1.sh

    2.通過輸入完整路徑運作腳本,需要修改權限

    [[email protected] ~]# chmod u+x example1.sh  增加可執行權限

    [[email protected] ~]# ./example1.sh 

##2.接收使用者的參數

    1.Linux内設了用于接收參數的變量,變量之間使用空格間隔

    2.$0 對應的是目前腳本程式的名稱

    3.$1、$2..... 分别對應第N個位置上的參數值

    4.$* 對應所有位置上的參數值

    5.$? 對應上一次指令的傳回結果

    6.$# 參數的個數

###腳本樣例

    #!/bin/bash

    echo "目前腳本名稱為$0"

    echo "總共有$#個參數,分别是$*"

    echo "第一個參數是$1,第五個參數是$5."

### 執行結果                                                                                                                                                                              

    [[email protected] ~]# bash example2.sh one two three four five six 

    目前腳本名稱為example2.sh

    總共有6個參數,分别是one two three four five six

    第一個參數是one,第五個參數是five.

##3. 判斷使用者的參數

###條件測試語句

    分類:

        檔案測試語句

        邏輯測試語句

        整數值比較語句

        字元串比較語句

    格式:

        測試語句格式: [ 條件表達式 ]

        說明:條件表達式左右都有一個空格

###條件測試參數

    檔案測試的參數及作用

    -d                     測試檔案是否為目錄

    -e                    測試檔案是否存在

    -f                    測試檔案是否是一般檔案

    -r                    測試目前使用者是否有權限讀取

    -w                    測試目前使用者是否有權限寫入

    -x                    測試目前使用者是否有權限執行

    邏輯測試語句

    &&(邏輯與)             && 符号前的命名為true,執行&&後指令

    ||(邏輯或)            || 符号前的指令為false,執行||後指令

    ! (邏輯非)

    整數比較運算符參數及作用

    -eq                    等于

    -ne                    不等于

    -gt                    大于

    -lt                    小于

    -le                    小于等于

    -ge                    大于等于

    字元串比較運算符參數及作用

    =                     比較字元串内容是否相同

    !=                    比較字元串内容是否不同

    -z                    判斷字元串内容是否為空

###測試樣例

    [roo[email protected] ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`

    [[email protected] ~]# echo $FreeMem

    941

    [[email protected] ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient memory"

    Insufficient memory

    [[email protected] ~]# echo $LANG

    zh_CN.UTF-8

    [roo[email protected] ~]# [ $LANG != "en.US" ] && echo "Not en.US"

    Not en.US

##4.流程控制語句

###if 條件測試語句

####測試樣例:

    1.if條件語句判斷/media/cdrom目錄是否存在,存在就結束條件和整個腳本;不存在建立目錄

    #!/bin/bash

    DIR="/media/cdrom"

    if [ ! -e $DIR ]

    then

    mkdir -p $DIR

    fi

    2.驗證某台主機是否線上

    參數解釋:

    -c                    設定嘗試次數

    -i                    每個資料包的發送間隔

    -W                    設定逾時時間

    #!/bin/bash

    ping -c 3 -i 0.2 -W 3 $1 $> /dev/null

    if [ $? -eq 0 ]

    then

    echo "Host $1 is on-line"

    else

    echo "Host $1 is off-line"

    fi

    3.多分支if語句來判斷使用者輸入的分數在哪個成績區間内

    參數解釋

    read 用來讀取使用者輸入資訊的指令,能夠把接收到的使用者輸入資訊指派給後面的指定變量

    -p   用于向使用者顯示一定的提示資訊

    #!/bin/bash

    read -p "Enter your score (0-100):" GRADE

    if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then

    echo "$GRADE is excellent"

    elif [ $GRADE -ge 70 ] && [$GRADE -le 84] ; then

    echo "$GRADE is pass"

    else

    echo "$GRADE is Fail"

    fi

###for條件循環語句

####功能

    允許腳本一次性讀取多個資訊,然後逐一對資訊進行操作處理,适合處理的資料有範圍

####文法結構

    for 變量名 in 取值清單

    do

        指令序列

    done

####測試樣例

    參數解釋

    id 使用者名     指令檢視使用者的資訊

    $?            判斷指令是否執行成功,即使用者是否已經存在

    /dev/null    是一個黑洞檔案,把輸出資訊重定向到這個檔案等同于删除資料

    1.從清單檔案中讀取多個使用者名,然後逐一建立使用者賬戶并設定密碼

    #!/bin/bash

    read -p "Enter the users password:" PASSWD

    for UNAME in `cat users.txt`

    do

    id $UNAME $> /dev/null

    if [ $? -eq 0 ]

    then

    echo "already exists"

    else

    useradd $UNAME $> /dev/null

    echo "$PASSWD" | passwd --stdin $UNAME $> /dev/null

    if [ $? -eq 0 ]

    then

    echo "$UNAME , create success"

    else

    echo "$UNAME , create failure"

    fi

    fi

    done

###while條件循環語句

####文法結構

    while 條件測試操作

    do

        指令序列

    done

####測試樣例

    參數解釋

    $RANDOM 随機産生 0-32767之間的整數

    expr指令 取得結果

    #!/bin/bash

    PRICE=$(expr $RANDOM % 1000)

    TIMES=0

    echo "商品的實際價格為0-999之間,猜猜看是多少?"

    while true

    do

    read -p "請輸入您猜的價格資料:" INT

    let TIMES++

    if [ $INT -eq $PRICE ] ; then

    echo "恭喜您答對了,實際價格是$PRICE"

    echo "您總共猜測了 $TIMES 次"

    exit 0

    elif [ $INT -gt $PRICE ] ; then

    echo "太高了!"

    else

    echo "太低了!"

    fi

    done

###case條件測試語句

####文法結構

    case 變量值 in

    模式1)

        指令序列1

        ;;

    模式2

        指令序列2

        ;;

    *)

        預設序列

    esac    

     #!/bin/bash

    read -p "請輸入一個字元,并按Enter鍵确認:" KEY

    case "$KEY" in

    [a-z] |[A-Z])

    echo "您輸入的是 字母"

    ;;

    [0-9])

    echo "您輸入的是數字"

    ;;

    *)

    echo "您輸入的是 空格、功能鍵或其他控制符"

    esac

##5.計劃任務程式服務

###計劃任務分類

    一次性計劃任務:今晚11點30分開啟網站服務

    長期性計劃任務:每周一的淩晨3點25分把/home/xxxx 目錄打包備份為 backup.tar.gz

###一次性計劃任務

    設定任務            at 時間

    檢視任務            at -l

    删除任務            atrm 任務序号

###周期性計劃任務

    Linux系統使用crond服務

    crontab -e                建立、編輯計劃任務

    crontab -l                檢視計劃任務

    crontab -r                删除某條計劃任務

    crontab -u                編輯他人的計劃任務(需要管理者登入)

    crontab設定任務參數及作用

    分                        取值為0-59的整數

    時                        取值為0-23的整數

    日                        取值為1-31的任意整數

    月                        取值為1-12的任意整數

    星期                        取值為0-7的整數(0/7均是周日)

    指令                        要執行的指令或腳本

###測試樣例

    [[email protected] ~]# crontab -e

    no crontab for root - using an empty one

    crontab: installing new crontab

    [[email protected] ~]# crontab -l

    25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

    0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

###注意事項

    在參數配置中,可以以#開頭寫上注釋資訊

    計劃任務中的分字段必須有數值,不能是空或*

    日與星期字段不能同時使用,否則會發生沖突

繼續閱讀