shell訓練營Day17
練習26
假設,當前MySQL服務的root密碼為123456,寫指令碼檢測MySQL服務是否正常(比如,可以正常進入mysql執行show processlist),
並檢測一下當前的MySQL服務是主還是從,如果是從,請判斷它的主從服務是否異常。如果是主,則不需要做什麼。
#!/bin/bash
mysql="/usr/local/mysql/bin/mysql -uroot -p123456"
if ! $mysql -e "show processlist" >/dev/null 2>/dev/null
then
echo "MySQL service is down."
exit
else
$mysql -e "show slave status\G" 2>/dev/null >/tmp/slave.stat
n=wc -l /tmp/slave.stat|awk '{print $1}'
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.tmp
if grep -qw "No" /tmp/SQL.tmp
then
echo "The slave is down."
fi
fi
fi
練習27
寫一個支援選項的增加或刪除使用者的shell指令碼,具體要求如下:
- 只支援三個選項:'--del','--add','--help',輸入其他選項報錯。
- 使用'--add'時,需要驗證使用者名稱是否存在,存在則反饋存在,且不新增。 不存在則建立該使用者,需要設定與該使用者名稱相同的密碼。
- 使用'--del'時,需要驗證使用者名稱是否存在,存在則刪除使用者及其家目錄。不存在則反饋該使用者不存在。
- --help選項反饋出使用方法。
- 能用echo $?檢測指令碼執行情況,成功刪除或新增使用者為0,不成功為非0正整數。
- 能以英文逗號分割,一次性新增或者刪除多個使用者。例如 adddel.sh --add user1,user2,user3
#!/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
練習28
#!/bin/bash
sum=0
for i in seq 1 100
do
j=$[$i%3]
if [ $j -eq 0 ]
then
sum=$[$sum+$i]
fi
done
echo $sum
練習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"停止。
#!/bin/bash
while :
do
read -p "Please input a number: " n
if [ -z "$n" ]
then
echo "請輸入一個純數字."
continue
fi
if echo $n |grep -qi 'end'
then
exit
fi
n1=echo $n|sed 's/[0-9]//g'
if [ -n "$n1" ]
then
echo "請輸入一個純數字."
continue
else
echo "你輸入的數字是: $n"
continue
fi
done