Shell練習(十二)

習題1:檢測文件改動

要求:有兩臺Linux服務器A和B,假如A可以直接ssh到B,不用輸入密碼。A和B都有一個目錄叫做/data/web/ 這下面有很多文件,當然我們不知道具體有幾層子目錄,假若之前A和B上該目錄下的文件都是一模一樣的。但現在不確定是否一致了。固需要我們寫一個腳本實現這樣的功能,檢測A機器和B機器/data/web/目錄下文件的異同,我們以A機器上的文件作爲標準。比如,假若B機器少了一個a.txt文件,那我們應該能夠檢測出來,或者B機器上的b.txt文件有過改動,我們也應該能夠檢測出來(B機器上多了文件我們不用考慮)。

提示:提示: 使用核心命令  md5sum a.txt  算出md5值,去和B機器上的比較。

參考答案:

#!/bin/bash
# date:2018年3月15日
dir=/data/web
B_ip=192.168.139.128
find $dir -type f |xargs md5sum > /tmp/md5.txt
ssh $B_ip "find $dir -type f |xargs md5sum > /tmp/md5_b.txt"
scp $B_ip:/tmp/md5_b.txt /tmp
for f in `awk '{print $2}' /tmp/md5.txt`
do
    if grep -q "$f" /tmp/md5_b.txt
    then
        md5_a=`grep $f /tmp/md5.txt|awk '{print $1}'`
        md5_b=`grep $f /tmp/md5_b.txt|awk '{print $1}'`
        if [ $md5_a != $md5_b ]
        then
            echo "$f changed..."
        fi
    else
        echo "$f deleted..."
    fi
done

習題2:判斷是否開啓80端口

要求:寫一個腳本判斷你的Linux服務器裏是否開啓web服務?(監聽80端口)如果開啓了,請判斷出跑的是什麼服務,是httpd呢還是nginx又或者是其他的什麼?

參考答案:

#!/bin/bash
# date:2018年3月15日
port=`netstat -lnp|grep -w 80`
if [ -z "$port" ];then
    echo "not service start!"
    exit;
fi
web_service=`echo $port|awk -F '/' '{print $2}'|awk -F ':' '{print $1}'`
case $web_service in
    httpd)
        echo "apache server."
        ;;
    nginx)
        echo "nginx server."
        ;;
    *)
        echo "other server."
        ;;
esac

習題3:監控MySQL服務

要求:假設,當前MySQL服務的root密碼爲123456,寫腳本檢測MySQL服務是否正常(比如,可以正常進入mysql執行show processlist),並檢測一下當前的MySQL服務是主還是從,如果是從,請判斷它的主從服務是否異常。如果是主,則不需要做什麼。

參考答案:

#!/bin/bash
# date:2018年3月15日
login="mysql -uroot -p123456"
$login -e "show processlist" >/tmp/mysql_error.log 2>&1
if [ $? -ne 0 ]
then
    echo "MySQL server something wrong!"
    exit;
else
    $login -e "show slave status\G" > /tmp/mysql_slave_status.log
    res=`wc -l /tmp/mysql_slave_status.log| awk '{print $1}'`
    if [ $res -gt 0 ]
    then
        y1=grep "Slave_IO_Running:" /tmp/mysql_slave_status.log |awk '{print $2}'
        y2=grep "Slave_SQL_Running:" /tmp/mysql_slave_status.log |awk '{print $2}'
        if [ "$y1" == "Yes" ] && [ "$y2" == "Yes" ]
        then
            echo "slave status good!"
        else
            echo "slave down!"
        fi
    fi
fi

習題4:帶選項的用戶腳本

要求:

    1 只支持三個選項 ‘–del’ ‘–add’ –help輸入其他選項報錯。

    2 使用‘–add’需要驗證用戶名是否存在,存在則反饋存在。且不添加。 不存在則創建該用戶,切>添加與該用戶名相同的密碼。並且反饋。

    3 使用‘–del’ 需要驗證用戶名是否存在,存在則刪除用戶及其家目錄。不存在則反饋該用戶不存>在。

    4 –help 選項反饋出使用方法

    5 支持以,分隔   一次刪除多個或者添加多個用戶。

    6 能用echo $?  檢測腳本執行情況  成功刪除或者添加爲0,報錯信息爲其他數字。

    7 能以,分割。一次性添加或者 刪除多個用戶。  例如 adddel.sh –add user1,user2,user3…….

    8 不允許存在明顯bug。

參考答案:

#!/bin/bash
# date:2018年3月15日
if [ $# -eq 0 -o $# -gt 2 ]
then
    echo "Usage $0 --add username or $0 --del username or $0 --help."
    exit 1
fi

case $1 in
    --add)
        for u in `echo $2|sed 's/,/ /g'`
        do
            if awk -F ':' '{print $1}' /etc/passwd|grep -qw "$u"
            then
                echo "The user $u is exist."
            else
                useradd $u
                echo -e "$u\n$u"|passwd $u > /dev/null 2>&1
                echo "The user $u added successfully."
            fi
        done
        ;;
    --del)
        for u in `echo $2|sed -r 's/,/ /g'`
        do
            if awk -F ':' '{print $1}' /etc/passwd|grep -qw "$u"
            then
                userdel -r $u
                echo -e "The user $u deleted successfully."
            else
                echo "The user $u not exist."
            fi
        done
        ;;
    --help)
        echo -e "--add can add user,and the passwd is the same as username.\nIt can add multiuser such as --add user1,user2,user3..."
        echo -e "--del cat delete user.It can delete user such as --del user1,user2,user3..."
        ;;
    *)
        echo "Usage $0 --add username or $0 --del username or $0 --help."
        exit 1
        ;;
esac


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