shell訓練營Day19
阿新 • • 發佈:2019-01-08
練習36
用shell實現,把一個文字文件中只有一個數字的行給打印出來。
參考答案
#!/bin/bash while read line do n=`echo $line |sed 's/[^0-9]//g'|wc -L` if [ $n -eq 1 ] then echo $line fi done < 1.txt 練習37 系統logrotate工具,可以完成日誌切割、歸檔。寫一個shell指令碼實現類似的歸檔功能。 舉例: 假如服務的輸出日誌是1.log,要求每天歸檔一個,1.log第二天就變成1.log.1,第三天1.log.2, 第四天 1.log.3 一直到1.log.5。 #!/bin/bash cd /data/logs log=1.log mv_log() { [ -f $1 ] && mv $1 $2 } [ -f 1.log.5 ] && rm -f 1.log.5 for i in `seq 4 -1 1` do j=$[$i+1] mv_log $log.$i $log.$j done mv 1.log 1.log.1 練習38 寫一個shell指令碼,把192.168.0.0/24網段線上的ip列出來。 #!/bin/bash for i in `seq 1 254` do if ping -c 2 -W 2 192.168.0.$i >/dev/null 2>/dev/null then echo "192.168.0.$i 是通的." else echo "192.168.0.$i 不通." fi done 練習39 寫一個shell指令碼,檢查指定的shell指令碼是否有語法錯誤,若有錯誤,首先顯示錯誤資訊,然後提示使用者輸入q或者Q退出指令碼,輸入其他內容則直接用vim開啟該shell指令碼。 #!/bin/bash sh -n $1 2>/tmp/sh.err if [ $? -ne 0 ] then cat /tmp/sh.err read -p "請輸入q/Q退出指令碼。" c if [ -z "$c"] then vim $1 exit 0 fi if [ $c == q ] || [ $c == Q ] then exit 0 else vim $1 exit 0 fi else echo "指令碼$1沒有語法錯誤." fi 練習40 輸入一串隨機數字,然後按千分位輸出。 比如輸入數字串為“123456789”,輸出為123,456,789。 #!/bin/bash n=`echo $1|wc -L` for d in `echo $1|sed 's/./& /g'` do n2=$[$n%3] if [ $n2 -eq 0 ] then echo -n ",$d" else echo -n "$d" fi n=$[$n-1] done |sed 's/^,//' echo