shell腳本實例(隨堂筆記)

    shell-3 課堂筆記

=====================================================================================
exam-1、批量添加用戶

[root@localhost ~]# vi user.txt 
liuye
dengchao
sunli
zhangjie
xiena

[root@localhost ~]# vi test1.sh
#!/bin/bash
#批量添加用戶
USERLIST=$(cat /root/user.txt)
for users in $USERLIST; do
        useradd $users
        echo "123456" |passwd --stdin $users &> /dev/null
done
=====================================================================================
exam-2、根據IP地址檢查主機狀態

[root@localhost ~]# vi ping.sh
#!/bin/bash
#主機存活檢查
>tong.txt
>butong.txt
for ipaddr in 192.168.6.{1..20}; do
        ping -c 2 -i 0.1 -W 1 $ipaddr &> /dev/null
        if [ $? -eq 0 ]; then
                echo "主機 $ipaddr 存活" |tee -a tong.txt
        else
                echo "主機 $ipaddr 不通" |tee -a butong.txt
        fi
done
echo "**************************************************"
echo "存活的主機有 $(cat tong.txt |wc -l) 個"
echo "它們分別是: "
awk '{print $2}' tong.txt
echo "不通的主機有 $(cat butong.txt |wc -l) 個"
echo "它們分別是: "
awk '{print $2}' butong.txt

======================================================================================
exam-3、


#!/bin/bash
#添加以stu開頭的20個用戶
pre="stu"
i=1
while [ $i -le 20 ]; do
        useradd ${pre}$i
        echo "123456" |passwd --stdin ${pre}$i &> /dev/null
        let i++
done

=========================================================================================
exam-4、

[root@localhost ~]# cat pricegame.sh 
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品實際價格爲0-999之間,猜猜看是多少?"
while true
do
    read -p "請輸入你猜測的價格數目:" INT
    let TIMES++
    if [ $INT -eq $PRICE ] ; then
        echo "恭喜你答對了,實際價格是 $PRICE"
        echo "你總共猜測了 $TIMES 次"
        exit 0
    elif [ $INT -gt $PRICE ] ; then
        echo "太高了!"
    else
        echo "太低了!"
    fi
done
========================================================================================
exam-5

[root@localhost ~]# cat aa.sh 
#!/bin/bash
# remove ln
for lnfile in $(ls -l /opt |grep "^l" |awk '{print $8}') ; do
 rm -rf /opt/$lnfile
done

====================================================================================
exam-6

[root@localhost ~]# cat hitkey.sh 
#!/bin/bash
read -p "請輸入一個字符,並按Enter鍵確認:" KEY
case "$KEY" in
  [a-z]|[A-Z])
      echo "您輸入的是 字母。"
      ;;
  [0-9])
      echo "您輸入的是 數字。"
      ;;
  *)
      echo "您輸入的是 空格、功能鍵或其他控制字符。"
esac

=====================================================================================
exam-7

[root@localhost ~]# cat test3.sh 
#!/bin/bash
#菜單設計
caishuzi() {
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品實際價格爲0-999之間,猜猜看是多少?"
while true
do
    read -p "請輸入你猜測的價格數目:" INT
    let TIMES++
    if [ $INT -eq $PRICE ] ; then
        echo "恭喜你答對了,實際價格是 $PRICE"
        echo "你總共猜測了 $TIMES 次"
 break
    elif [ $INT -gt $PRICE ] ; then
        echo "太高了!"
    else
        echo "太低了!"
    fi
done
}
suanshu() {
while :
do
A=$RANDOM
B=$RANDOM
echo "請計算下面的加法試題"
read -p  "$A + $B = " res
da=$(expr $A + $B)
if [ $res -eq "$da" ]; then
 echo "恭喜你答對了,答案是: $da"
 sleep 5
 break
else
 echo "很抱歉,請繼續"
fi
done
}
aaa() {
clear
cat <<MADAY
 --------------------------------------------
/  教育改變生活       \\
|               1 )  猜數字遊戲              |
|  2 )  算術       |
|  q )  退出       |
---------------------------------------------
MADAY
read -p "請輸入您的選項(1|2|q): " ky
case $ky in
 1)
 caishuzi
 ;;
 2)
 suanshu
 ;;
 q|Q)
 exit 2
 ;;
 *)
 echo "您的輸入有誤,請重新輸入"
 ;;
esac
}
while true
do
 aaa
done

======================================================================================
exam-8: 啓停腳本架構

[root@localhost ~]# cat /etc/init.d/newd 
#!/bin/bash
# chkconfig: - 80 15
# description: aaaaaaaaaaaaaaaaaaaaaaaa
case $1 in
 start)
 echo "啓動成功"
 ;;
 stop)
 echo "停止成功"
 ;;
 restart)
 $0 stop
 $0 start
 ;;
 *)
 echo "用法:$0(start|stop|restart)"
 exit 1
 ;;
esac

===================================================================================
exam-9 
需求描述
爲已安裝的zebra程序編寫 zebrad 服務控制腳本
 啓動服務:/etc/init.d/zebrad start
 終止服務:/etc/init.d/zebrad start
 重啓服務:/etc/init.d/zebrad restart
 查看服務狀態:/etc/init.d/zebrad status
 未正確指定“start”、“stop”、“restart”、“status”參數時,輸出用法幫助信息後退出
 在啓動、終止服務時應顯示相關提示信息
將zebrad添加爲系統服務
-------------------------------------------------------------------------------------
實現思路
參考已有的系統腳本建立 zebrad 腳本文件
將啓動、終止zebra程序等執行操作分別定義爲函數
 通過“/usr/local/sbin/zebra -d”命令啓動zebra服務
 結合“/var/run/zebra.pid”文件中的PID號終止zebra進程
 通過判斷“zebra -d”進程信息確定zebra服務狀態
設置case分支語句
 讀取執行腳本時提供的未知參數“$1”,並進行比較
 若爲“start”、“stop”等字串,分別調用對應函數
 否則執行默認操作,顯示用法幫助信息並退出
執行“chkconfig --add zebrad”添加爲系統服務
-------------------------------------------------------------------------------------
[root@localhost ~]# cd /usr/src/zebra-0.95a/
[root@localhost zebra-0.95a]# ./configure --prefix=/usr/local/zebra ; make ; make install
[root@localhost zebra-0.95a]# ln -s /usr/local/zebra/sbin/* /usr/local/sbin/
[root@localhost zebra-0.95a]# cd /usr/local/zebra/etc/
[root@localhost etc]# cp zebra.conf.sample zebra.conf

    腳本文件開頭要保留用於chkconfig配置的內容,例如:
#!/bin/bash
# chkconfig: 2345 99 60
# description: Start/Stop the zebra router daemon.
START()
{
 if [ -e /var/run/zebra.pid ]; then
  echo "爲 zebrad 啓動 zebrad:                                    [失敗]"
  exit 1
 else
  /usr/local/sbin/zebra -d &> /dev/null
  if [ -e var/run/zebra.pid ]; then
   echo "爲 zebrad 啓動 zebrad:                                    [確定]"
  else
   echo "爲 zebrad 啓動 zebrad:                                    [失敗]"
  fi
 fi 
}
STOP()
{
 if [ -e /var/run/zebra.pid ]; then
  PID=$(cat /var/run/zebra.pid)
  kill -9 $PID
  rm -rf /var/run/zebra.pid
  if [ -e /var/run/zebra.pid ]; then
   echo "關閉 zebrad:                                              [失敗]"
   exit 2
  else
   echo "關閉 zebrad:                                              [確定]"
  fi
 else
  echo "關閉 zebrad:                                              [失敗]"
  exit 2
 fi
}
STATUS()
{
 if [ -e /var/run/zebra.pid ]; then
  pid=$(cat /var/run/zebra.pid)
  echo "zebrad (pid $pid) 正在運行..."
  exit 0
 else
  echo "zebrad 已停"
  exit 1
 fi
}
case $1 in
 start)
 START
 ;;
 stop)
 STOP
 ;;
 restart)
 $0 stop
 $0 start
 ;;
 status)
 STATUS
 ;;
 *)
 echo "用法: $0 {start|stop|restart|status}"
 exit 1
 ;;
esac

 

 

 

 

 

 

 


 

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