Shell練習(十五)

習題1:監控網卡

要求:每10分鐘檢測一次指定網卡流量;如果網卡流量爲0,則重啓網卡!(使用cron任務計劃!)

參考答案:

#!/bin/bash
# date:2018年3月21日
LANG=en
n1=`sar -n DEV 1 60|grep ens33|grep -i average|awk '{print $5}'|sed 's/\.//g'`
n2=`sar -n DEV 1 60|grep ens33|grep -i average|awk '{print $6}'|sed 's/\.//g'`
if [ $n1 == "000" ] && [ $n2 == "000" ]
then
    ifdown ens33
    ifup ens33
fi

習題2:判斷日期是否合法

要求:用shell腳本判斷輸入的日期是否合法。就是判斷日期是都是真實的日期,比如20170110就是合法日期,20171332就不合法。

參考答案:

#!/bin/bash
# date:2018年3月21日
if [ $# -ne 1 ] || [ ${#1} -ne 8 ]
then
    echo "Usage: bash $0 yyyymmdd"
    exit 1
fi
date=$1
year=${date:0:4}
month=${date:4:2}
day=${date:6:2}

if echo $day|grep -q '^0'
then
    day=`echo $day|sed 's/^0//'`
fi

if cal $month $year > /dev/null 2> /dev/null
then
    daym=`cal $month $year|grep -v "$year"|grep -w "$day"`
    if [ "$daym" != "" ]
    then
        echo "ok"
    else
        echo "Error:Please input a right date"
        exit 1
    fi
else
    echo "Error: Please input a right date"
    exit 1
fi


習題3:檢查服務

要求:先判斷是否安裝http和mysql,沒有安裝進行安裝,安裝了檢查是否啓動服務,若沒有啓動則需要啓動服務。

參考答案:

#!/bin/bash
# date:2018年3月21日
if_install()
{
    n=`rpm -qa|grep -cw "$1"`
    if [ $n -eq 0 ]
    then
        echo "$1 not install."
    else
        echo "$1 installed."
    fi
}

if_install httpd
if_install mysql

chk_ser()
{
    p_n=`ps -C "$1" --no-heading |wc -l`
    if [ $p_n -eq 0 ];then
        echo "$1 not start."
        systemctl start $1
  else
        echo "$1 started."
    fi
}

chk_ser httpd
chk_ser mysqld


習題4:3位隨機數字

要求:寫一個腳本產生隨機3位的數字,並且可以根據用戶的輸入參數來判斷輸出幾組。 比如,腳本名字爲 number3.sh。

    執行方法:
    bash  number3.sh
    直接產生一組3位數字。
    bash number3.sh 10
    插上10組3位數字。

思路: 可以使用echo $RANDOM獲取一個隨機數字,然後再除以10,取餘獲取0-9隨機數字,三次運算獲得一組。

參考答案:

#!/bin/bash
# date:2018年3月21日
get_num(){
    n=$[$RANDOM%10]
    echo $n
}
get_numbers(){
    for i in 1 2 3
    do
        a[$i]=`get_num`
    done
    echo "${a[*]}"
}
if [ -n "$1" ];then
    m=`echo $1|sed 's/[0-9]//g'`
    if [ -n "$m" ];then
        echo "Usage: bash $0 n, n is a number."
        exit 1
    else
        for i in `seq 1 $1`
        do
            get_numbers
        done
    fi
else
    get_numbers
fi

習題5:三行變一行

參考答案:

blob.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章