1. 程式人生 > >Shell 腳本 100 例《二》

Shell 腳本 100 例《二》

時間 lin 快速 判斷 重置 添加位置 9*9 jin 符號

11. 編寫腳本,實現人機<石頭,剪刀,布>遊戲
#!/bin/bash
#Author:丁丁歷險(Jacob)
game=(石頭 剪刀 布)
num=$[RANDOM%3]
computer=${game[$num]}
#通過隨機數獲取計算機的出拳
#出拳的可能性保存在一個數組中,game[0],game[1],game[2]分別是 3 中不同的可能

echo "請根據下列提示選擇您的出拳手勢"
echo "1.石頭"
echo "2.剪刀"
echo "3.布"

read ‐p "請選擇 1‐3:" person
case $person in
1)
if [ $num ‐eq 0 ];then

echo "平局"
elif [ $num ‐eq 1 ];then

echo "你贏"
else

echo "計算機贏"
fi;;
2)
if [ $num ‐eq 0 ];then

echo "計算機贏"
elif [ $num ‐eq 1 ];then

echo "平局"
else

echo "你贏"
fi;;
3)
if [ $num ‐eq 0 ];then

echo "你贏"
elif [ $num ‐eq 1 ];then

echo "計算機贏"
else

echo "平局"
fi;;
*)
echo "必須輸入 1‐3 的數字"
esac

12. 編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機
狀態(for 版本)
#!/bin/bash
for i in {1..254}
do
ping ‐c2 ‐i0.3 ‐W1 192.168.4.$i &>/dev/null

if [ $? –eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi
done

13. 編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機
狀態(while 版本)
#!/bin/bash
i=1
while [ $i ‐le 254 ]
do
ping ‐c2 ‐i0.3 ‐W1 192.168.4.$i &>/dev/null
if [ $? –eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi
let i++
done

14. 編寫腳本測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機
狀態(多進程版)
#!/bin/bash
#Author:丁丁歷險(Jacob)
#定義一個函數,ping 某一臺主機,並檢測主機的存活狀態
myping(){
ping ‐c2 ‐i0.3 ‐W1 $1 &>/dev/null
if [ $? ‐eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
}
for i in {1..254}
do
myping 192.168.4.$i &
done
#使用&符號,將執行的函數放入後臺執行
#這樣做的好處是不需要等待 ping 第一臺主機的回應,就可以繼續並發 ping 第二臺主機,依次類推。

15. 編寫腳本,顯示進度條
#!/bin/bash
jindu(){
while :
do
echo ‐n '#'
sleep 0.2
done
}
jindu &
cp ‐a $1 $2
killall $!
echo "拷貝完成''

16. 進度條,動態時針版本
#!/bin/bash
#定義一個顯示進度的函數,屏幕快速顯示| / ‐ \
rotate_line(){
INTERVAL=0.1 #設置間隔時間
COUNT="0" #設置 4 個形狀的編號,默認編號為 0(不代表任何圖像)
while :
do
COUNT=`expr $COUNT + 1` #執行循環,COUNT 每次循環加 1,(分別代表 4 中不同的形狀)
case $COUNT in #判斷 COUNT 的值,值不一樣顯示的形狀就不一樣
"1") #值為 1 顯示‐
echo ‐e '‐'"\b\c"
sleep $INTERVAL
;;
"2") #值為 2 顯示\\,第一個\是轉義
echo ‐e '\\'"\b\c"
sleep $INTERVAL
;;
"3") #值為 3 顯示|
echo ‐e "|\b\c"
sleep $INTERVAL
;;
"4") #值為 4 顯示/
echo ‐e "/\b\c"
sleep $INTERVAL
;;
*) #值為其他時,將 COUNT 重置為 0
COUNT="0";;
esac
done
}
rotate_line

17. 9*9 乘法表(編寫 shell 腳本,打印 9*9 乘法表)
#!/bin/bash

for i in `seq 9`
do
for j in `seq $i`
do
echo ‐n "$i*$j=$[i*j] "
done
echo
done

18. 使用死循環實時顯示 eth0 網卡發送的數據包流量
#!/bin/bash
#Author:丁丁歷險(Jacob)
while :
do
echo '本地網卡 eth0 流量信息如下: '
ifconfig eth0 | grep "RX pack" | awk '{print $5}'
ifconfig eth0 | grep "TX pack" | awk '{print $5}'
sleep 1
done

19. 使用 user.txt 文件中的人員名單,在計算機中自動創建對應的賬戶並配置初始密碼
#!/bin/bash
#本腳本執行,需要提前準備一個 user.txt 文件,該文件中包含有若幹用戶名信息
for i in `cat user.txt`
do
useradd $i
echo "123456" | passwd ‐‐stdin $i
done

20. 編寫批量修改擴展名腳本,如批量將 txt 文件修改為 doc 文件
#!/bin/bash
#執行腳本時,需要給腳本添加位置參數
#腳本名 txt doc(可以將 txt 的擴展名修改為 doc)
#腳本名 doc jpg(可以將 doc 的擴展名修改為 jpg)

for i in "ls *.$1"
do
mv $i ${i%.*}.$2
done


Shell 腳本 100 例《二》