一、假如當前mysql密碼爲 nihao123! 寫腳本檢測mysql服務是否正常(好比 能夠進入mysql 裏 執行 show processlist),並檢測當前mysql是主仍是從,若是是從,則判斷 它 的主是否正常,若是是主,則什麼也不作;mysql
[root@localhost_002 shell100]# cat 22.sh #!/bin/bash mysql="/usr/local/mysql/bin/mysql -uroot -pnihao123!" if ! $mysql -e "show processlist" > /dev/null 2>&1 then echo "msyql service is down;" exit else $mysql -e "show slave status\G" >/tmp/slave.state 2>/dev/null n=`wc -l /tmp/slave.state` if [ $n -eq 0 ] then echo "This is master." else echo "This is slave" egrep 'Slave_IO_Running:|Slave_SQL_Running:'|awk -F ': ' '{print $2}' >/tmp.sql if grep -qw "No" /tmp/tmp.sql then echo "The is salve is down" fi fi fi
注意 分三步:首先經過是否能夠執行 show processlist 來判斷mysql服務是否可用;以下:sql
[root@localhost_002 shell100]# mysql -uroot -pnihao123! -e "show processlist" Warning: Using a password on the command line interface can be insecure. +----+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+-------+------------------+ | 3 | root | localhost | NULL | Query | 0 | init | show processlist | +----+------+-----------+------+---------+------+-------+------------------+
註釋: mysql -e 選項能夠用來執行命令; 用法: mysql -uroot -pnihao123! -e "show processlist"shell
而後用 if 來做爲判斷條件了; if ! $mysql -e "show processlist" 若是沒正常執行,則怎麼樣;bash
而後再判斷mysql主從,經過打印 show slave status\G 內容寫入到一個文件,而後判斷這個文件的行數是否等於 0 ,若是是主,則沒有任何內容 | 也就是等於 0 , 不然就是從; 而後在經過show slave status\G,經過egrep 過濾出來 Slave_IO_Running:和Slave_SQL_Runnning: 打印出第二行,判斷是否等於 No ,若是是,則主從已經掛了,能夠設置發郵件或告警等操做;this
2、寫一個支持選項的增長或刪除用戶的shell腳本,具體要求以下:spa
#!/bin/baash if [ $# -eq 0 ] || [ $# -gt 2 ] then echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 --help" exit fi ex_user() { if ! id $1 2>/dev/null >/dev/null then useradd $1 && echo "$1 add successful." else echo $1 exist. fi } notex_user() { if id $1 2>/dev/null >/dev/null then userdel $1 && echo "$1 delete successful." else echo $1 not exist. fi } case $1 in --add) if [ $# -eq 1 ] then echo "Wrong, use bash $0 --add user or bash $0 --add user1,user2,user3..." exit else n=`echo $2| awk -F ',' '{print NF}'` if [ $n -gt 1 ] then for i in `seq 1 $n` do username=`echo $2 |awk -v j=$i -F ',' '{print $j}'` ex_user $username done else ex_user $2 fi fi ;; --del) if [ $# -eq 1 ] then echo "Wrong, use bash $0 --del user or bash $0 --del user1,user2,user3..." exit else n=`echo $2| awk -F ',' '{print NF}'` if [ $n -gt 1 ] then for i in `seq 1 $n` do username=`echo $2 |awk -v j=$i -F ',' '{print $j}'` notex_user $username done else notex_user $2 fi fi ;; --help) if [ $# -ne 1 ] then echo "Wrong, use bash $0 --help" exit else echo "Use bash $0 --add username or bash $0 --add user1,user2,user3... add user." echo " bash $0 --del username -r bash $0 --del user1,user2,user3... delete user." echo " bash $0 --help print this info." fi ;; *) echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 --help" ;; esac
三、寫一個腳本,計算100以全部被3整除的正整數值得和;code
分析:能被 3 整除,那就是這個數除以 3 ,餘數是 0 ,在shell中的表達式爲:$[$i%3] i 是變量名ssl
全部數字求和:設置一個初始值爲 0 ,每循環一次,加一個數字獲得新的和; 字符串
註釋: for i in `seq 1 100` 等同於 for i in {1..100} input
[root@localhost_002 shell100]# cat 28.sh #!/bin/bash sum=0 for i in {1..100} do n=$[$i%3] if [ $n -eq 0 ] then sum=$[$i+$sum] fi done echo "$sum" [root@localhost_002 shell100]# sh 28.sh 1683
29:使用傳參的方法寫個腳本,實現加減乘除的功能。 例如: sh a.sh 1 2,這樣會分別計算加、減、乘、除的結果。
要求:
#!/bin/bash is_nu() { n=`echo $1 |sed 's/[0-9]//g'` if [ -n "$n" ] then echo "給出的參數必須是正整數" exit fi } if [ $# -ne 2 ] then echo "必需要輸入兩個參數" exit else is_nu $1 is_nu $2 fi big() { if [ $1 -gt $2 ] then echo $1 else echo $2 fi } small() { if [ $1 -lt $2 ] then echo $1 else echo $2 fi } add() { sum=$[$1+$2] echo "$1+$2=$sum" } jian() { b=`big $1 $2` s=`small $1 $2` cha=$[$b-$s] echo "$b-$s=$cha" } cheng() { ji=$[$1*$2] echo "$1x$2=$ji" } chu() { b=`big $1 $2` s=`small $1 $2` v=`echo "scale=2;$b/$s"|bc` echo "$b/$s=$v" } add $1 $2 jian $1 $2 cheng $1 $2 chu $1 $2
30:寫一個腳本:打印一行提示 "please input a number:",要求用戶輸入數值後打印出該數值,而後再次要求用戶輸入數值,知道用戶輸入 end 才退出;
知足特定的條件( end )才退出,適合用戶 while;
提示用戶輸入值: 用 read -p
而後用戶輸入的值用 if 作一個判斷 是否等於 end;
[root@localhost_002 shell100]# cat 30.sh #!/bin/bash while : do read -p "please input number: " n num=`echo $n|sed 's#[0-9]##g'|wc -L` if [ $n == "end" ] then echo "bye" exit fi if [ $num -ne 0 ] then echo "you input is not number, try again" else echo "you input number is:$n" fi done [root@localhost_002 shell100]# sh 30.sh please input number: abc you input is not number, try again please input number: 456 you input number is:456 please input number: en you input is not number, try again please input number: end bye
註釋:`sed 's#[0-9]##g'|wc -L` 會把全部的數字刪除,只留下非數字的字符; wc -L 是統計最長行的字符串長度,長度爲0,說明是已經被替換的爲空的純數字,不然是非數字字符,不符合要求;
註釋:在shell 中,判斷兩個字符串是否相等,則須要用 ==,不能使用 -eq , -eq 是使用來判斷數字,
如:a=abc;b=abc; if [ $a == $b ];then echo $a;fi
wc -l 統計 行數; list
wc -w 統計單詞數; word
wc -m 統計字符數;
wc -L 統計最長行的長度;