day17:判斷mysql服務及主從|增長和刪除用戶的腳本|能被100整除的數的和|使用傳參的方法加減乘除|while循環用戶輸入特定值

一、假如當前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

  1. 只支持三個選項:'--del','--add','--help',輸入其餘選項報錯。
  2. 使用'--add'時,須要驗證用戶名是否存在,存在則反饋存在,且不添加。 不存在則建立該用戶,須要設置與該用戶名相同的密碼。
  3. 使用'--del'時,須要驗證用戶名是否存在,存在則刪除用戶及其家目錄。不存在則反饋該用戶不存在。 
  4. --help選項反饋出使用方法。
  5. 能用echo $?檢測腳本執行狀況,成功刪除或添加用戶爲0,不成功爲非0正整數。
  6. 能以英文逗號分割,一次性添加或者刪除多個用戶。例如 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

 

 

 

三、寫一個腳本,計算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,這樣會分別計算加、減、乘、除的結果。

要求:

  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   統計最長行的長度;

相關文章
相關標籤/搜索