Shell 腳本 100 例《二》

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


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