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