分支與迴圈結構 if語句是實際生產工作中最重要且最常用的語句,所以,必須掌握牢固。 if條件句 if條件句語法 單分支結構 語法 if [ 條件 ] then 指令 fi 或 if [ 條件 ];then 指令 fi 條件表達式[ -f "$file1" ]&& echo 1,相當於下麵的if語句。... ...
分支與迴圈結構
if語句是實際生產工作中最重要且最常用的語句,所以,必須掌握牢固。
if條件句
if條件句語法
- 單分支結構
語法
- if [ 條件 ]
- then
- 指令
- fi
- 或
- if [ 條件 ];then
- 指令
- fi
條件表達式[ -f "$file1" ]&& echo 1,相當於下麵的if語句。
- if [ -f "$file1" ];then
- echo 1
- fi
- 雙分支結構
- if [ 條件 ]
- then
- 指令集1
- else
- 指令集2
- fi
條件表達式[ -f "$file1" ]&& echo 1||echo 0,相當於雙分支if [ -f "$file1" ];then echo 1;else echo 0;fi。
- 多分支結構
- if 條件
- then
- 指令
- elif 條件
- then
- 指令
- elif 條件
- then
- 指令
- ...
- else
- 指令
- fi
單分支if條件句
開發shell腳本判斷系統剩餘記憶體的大小,如果低於100M就郵件報警給管理員,並加入系統定時任務每三分鐘執行一次檢查。
free -m|awk 'NR==2{print $4}'
- [root@lamp ~]# cat free_m.sh
- #!/bin/bash
- FREE=`free -m|awk 'NR==3{print $4}'`
- if [ $FREE -lt 100 ]
- then
- echo "warning:The available memory $FREE."
- exit 0
- fi
- echo "The available memory $FREE."
雙多分支if條件句
用if雙分支實現read讀入的方式比較兩個數的大小。
- [root@lamp ~]# cat c3.sh
- #!/bin/bash
- read -p "Pls input two nums: " num01 num02
- [ -z $num01 ]&&{
- echo "the num01 you input must be int."
- exit 2
- }
- [ -z $num02 ]&&{
- echo "the num02 you input must be int."
- exit 2
- }
- expr $num01 + $num02 + 1 &>/dev/null
- [ $? -ne 0 ]&&{
- echo "the num you input must be int."
- exit 2
- }
- if [ $num01 -lt $num02 ]
- then
- echo "$num01 < $num02."
- elif [ $num01 -gt $num02 ]
- then
- echo "$num01 > $num02."
- else
- echo "$num01 = $num02."
- fi
用if雙分支實現對nginx或mysql服務是否正常進行判斷,使用進程數、埠、url的方式判斷,如果進程沒起,把進程啟動。
web服務和資料庫(mysql)的監控方法。
1、埠監控
本地監控:netstat、ss、lsof
遠程監控:telnet、nmap、nc
telnet監控埠
- [root@lamp ~]# echo -e "\n"|telnet www.baidu.com 80|grep Connected|wc -l
- Connection closed by foreign host.
- 1
nmap監控埠
- [root@lamp ~]# nmap www.baidu.com -p 80|grep open|wc -l
- 1
nc監控埠
- [root@lamp ~]# nc -z 192.168.163.128 22|grep succeeded|wc -l
- 1
2、進程監控
本地監控:ps -ef|grep mysql|wc -l
3、wget、curl,http方式根據返回值或者返回內容判斷。
4、header(http),http方式根據狀態碼判斷。
5、資料庫特有通過mysql客戶端連接,根據返回值或者返回內容判斷。
- [root@lamp ~]# cat check_db.sh
- #!/bin/bash
- #local
- if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]
- #if [ `ps -ef|grep mysql|grep -v grep|wc -l` -gt 0 ]
- #if [ `netstat -lntup|grep mysqld|wc -l` -gt 0 ]
- #if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
- #remote
- #if [ `nmap 192.168.1.123 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]
- #if [ `nc -w 2 192.168.1.123 3306 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ]
- then
- echo "Mysql is Running."
- else
- echo "Mysql is Stopped."
- /deta/mysql start
- fi
- [root@lamp ~]# cat check_web.sh
- #!/bin/bash
- if [ "`curl -I -s -o /dev/null -w "%{http_code}\n" http://192.168.1.123`" = "200" ]
- #if [ `curl -I http://192.168.1.123 2>/dev/null|head -1|egrep "200|302|301"|wc -l` -eq 1 ]
- #curl -s http://192.168.1.123 &>/dev/null
- #if [ $? -eq 0 ]
- #if [ "`curl -s http://192.168.1.123 &>/dev/null&&echo $?`" = "0" ]
- #if [ "`curl -s http://192.168.1.123`" = "bbs" ]
- then
- echo "httpd is running."
- else
- echo "httpd is stopped."
- fi
通過傳參的方式往/etc/user.conf里添加用戶,具體要求如下:
1、命令用法:USAGE:sh adduser {-add|-del|-search} username
2、傳參要求:如果參數為-add,表示添加後面接的用戶名;如果參數為-del,表示刪除後面接的用戶名;如果參數為-search,表示查找後面接的用戶名。
3、如果有同名的用戶則不能添加,沒有對應用戶則無需刪除,查找到用戶以及沒有用戶時給出明確提示。
4、/etc/user.conf不能被所有外部用戶之間刪除或修改。
- [root@lamp ~]# cat user.sh
- #!/bin/bash
- ROOT_UID=0
- if [ "$UID" -ne "$ROOT_UID" ]
- then
- echo "Mast be root to run this script."
- exit 1
- fi
- if [ $# -ne 2 ]
- then
- echo "USAGE:sh $0 {-add|-del|-search} username."
- exit 2
- fi
- check=$1
- name=$2
- if [ "$check" = "add" ]
- then
- result=`cat /etc/user.conf|grep -Fx "$name"`
- [ -z $result ]&&{
- echo "$name" >> /etc/user.conf
- echo "user add "$name" is ok."
- exit 0
- }
- echo "user $name is in."
- exit 0
- elif [ "$check" = "del" ]
- then
- result=`cat /etc/user.conf|grep -Fx "$name"`
- [ -z $result ]&&{
- echo "user "$name" not find."
- exit 0
- }
- sed -ri /^$name$/d /etc/user.conf
- echo "user del "$name" is ok."
- elif [ "$check" = "search" ]
- then
- result=`cat /etc/user.conf|grep -Fx "$name"`
- [ -z $result ]&&{
- echo "user $name not find."
- exit 0
- }
- echo $result
- exit 0
- else
- echo "USAGE:sh $0 {-add|-del|-search} username."
- exit 1
- fi
獲取文件md5值,防篡改。
- [root@lamp ~]# find ./ -type f|xargs md5sum
將md5值寫入文件。
- [root@lamp ~]# find ./ -type f|xargs md5sum >/tmp/md5list
比較md5值。
- [root@lamp ~]# md5list -c /tmp/md5list