1. 程式人生 > >Shell練習(十三)

Shell練習(十三)

linux shell

習題1:格式化輸出

要求:輸入一串隨機數字,然後按千分位輸出。比如輸入數字串為“123456789”,輸出為123,456,789

#/bin/bash
# date:2018年3月15日
read -p "Please input a long number:" num
v=`echo $num|sed 's/[0-9]//g'`
if [ -n "$v" ]
then
    echo "please input a number."
    exit 1
fi
echo $num|sed -r '{:number;s/([0-9]+)([0-9]{3})/\1,\2/;t number}'

習題2:找出活動ip

要求:寫一個shell腳本,把192.168.0.0/24網段在線的ip列出來。思路: for循環, 0.1 — 0.254 依次去ping,能通說明在線。

參考答案:

#/bin/bash
# date:2018年3月15日
ips="192.168.139."
for i in `seq 1 254`
do
    ping -c 2 $ips$i > /dev/null 2>/dev/null
    if [ $? == "0" ]
    then
        echo "$ips$i is online"
    else
        echo "$ips$i is not online."
    fi
done

習題3:日誌歸檔

要求:類似於日誌切割,系統有個logrotate程序,可以完成歸檔。但現在我們要自己寫一個shell腳本實現歸檔。

舉例: 假如服務的輸出日誌是1.log,我要求每天歸檔一個,1.log第二天就變成1.log.1,第三天1.log.2, 第四天 1.log.3 一直到1.log.5

參考答案:

#/bin/bash
# date:2018年3月15日
function lf()
{
    [ -f $1 ]&& rm -f $1
}
for i in `seq 5 -1 2`
do
    i2=$[$i-1]
    lf /data/1.log.$i
    if [ -f /data/1.log.$i2 ]
    then
        mv /data/1.log.$i2 /data/1.log.$i
    fi
done

lf /data/1.log.1
mv /data/1.log /data/1.log.1


Shell練習(十三)