1、流程控制語句mysql
一、if語句nginx
①if單分支:一個條件一個結果面試
1
2
3
4
|
if
條件
then
命令
fi
|
②if雙分支:一個條件兩個結果sql
1
2
3
4
5
6
|
if
條件
then
命令
else
命令2
fi
|
③if多分支:多個條件多個結果shell
1
2
3
4
5
6
7
8
9
10
11
12
13
|
if
條件
then
命令
elif 條件2
then
命令2
elif 條件3
then
命令3
……
else
命令4
fi
|
#企業面試題001#編程
開發檢測系統內存監控腳本,若是低於800M,郵件報警,而且定時任務每三分鐘執行一次檢測數組
cat check_mem.sh #!/bin/sh Mem=`free -m|awk 'NR==3{print $NF}'` if [ "$Mem" -lt "800" ] then echo $Mem|mail -s "系統內存低於800M" 774181401@qq.com fi
#企業面試題002#bash
模擬啓動nginx腳本,使用if語句判斷輸入的是否爲start、stop、restart……app
#!/bin/sh . /etc/init.d/functions Nginx_Start="/application/nginx/sbin/nginx" Nginx_stop="${Nginx_Start} -s stop" if [ "$1" == "start" ] then ${Nginx_Start} action "starting Nginx" /bin/true elif [ "$1" == "stop" ] then ${Nginx_stop} pkill nginx action "Nginx is stopped" /bin/true elif [ "$1" == "restart" ] then ${Nginx_stop} && ${Nginx_Start} action "Nginx is restarting" /bin/true elif [ "$1" != "start" -a "$1" != "stop" -a "$1" != "restart" ] echo "USAGE: $0 {start|stop|restart}" fi
二、case語句ssh
①語法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
case
$x
in
值1)
命令1
;;
值2)
命令2
;;
值3)
命令3
;;
*)
命令4
esac
|
②case語句至關於多分支if語句,適合變量少,且爲固定數字或者字符串集合,多用於系統啓動腳本
#case實戰菜單小題#
#!/bin/bash cat<<EOF 1. install rsync 2. install nfs 3. install mysql 4. install all 5. exit EOF read -p '請輸入你的選擇:' num case $num in 1) echo "install rsync suscess!" ;; 2) echo "install nfs suscess!" ;; 3) echo "install mysql suscess!" ;; 4) echo "install all suscess!" ;; 5) exit ;; *) echo "選擇有誤" esac
#case結合while實戰水果菜單選擇#
#!/bin/sh RED='\E[1;31m' GREEN='\E[1;32m' YELLOW='\E[1;33m' RES='\E[0m' cat <<EOF ================== 1.apple 2.pear 3.banana 4.exit ================== EOF while true do read -p "請輸入你喜歡吃的水果:" choice case $choice in 1) echo -e "你喜歡的水果是: $RED apple $RES" ;; 2) echo -e "你喜歡的水果是: $GREEN pear $RES" ;; 3) echo -e "你喜歡的水果是:$YELLOW banana $RES" ;; 4) exit ;; *) echo "輸入有誤" esac done
#給輸出字體加顏色#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
前景顏色:<br>echo -e
"\033[30m 黑色字oldboy trainning \033[0m"
echo -e
"\033[31m 紅色字oldboy trainning \033[0m"
echo -e
"\033[32m 綠色字oldboy trainning \033[0m"
echo -e
"\033[33m 黃色字oldboy trainning \033[0m"
echo -e
"\033[34m 藍色字oldboy trainning \033[0m"
echo -e
"\033[35m 紫色字oldboy trainning \033[0m"
echo -e
"\033[36m 天藍字oldboy trainning \033[0m"
echo -e
"\033[37m 白色字oldboy trainning \033[0m"
背景顏色:
echo -e
"\033[40;37m 黑底白字 welcome to old1boy\033[0m"
echo -e
"\033[41;37m 紅底白字 welcome to old2boy\033[0m"
echo -e
"\033[42;37m 綠底白字 welcome to old3boy\033[0m"
echo -e
"\033[43;37m 黃底白字 welcome to old4boy\033[0m"
echo -e
"\033[44;37m 藍底白字 welcome to old5boy\033[0m"
echo -e
"\033[45;37m 紫底白字 welcome to old6boy\033[0m"
echo -e
"\033[46;37m 天藍白字 welcome to old7boy\033[0m"
echo -e
"\033[47;30m 白底黑字 welcome to old8boy\033[0m"
關閉顏色\033[0m
|
三、for語句
①語法
1
2
3
4
5
6
7
|
for
i(變量)
in
{1..10}
in
後面能夠加命令`ls` `seq 10`
do
echo $i
done
|
②經過for循環優化開機啓動
#!/bin/sh Close_Service=`chkconfig|grep 3:on|awk '{print $1}'|egrep -v "crond|network|sshd|rsyslog|sysstat"` for name in $Close_Service do chkconfig $name off done
四、while語句
①語法
1
2
3
4
5
6
7
8
9
|
while
條件
do
命令
done
條件永遠成立--死循環
守護進程:不中止的進程
true
|
②while按行讀文件的方式
方式1、 exec <file sum=0 while read line do cmd done 方式二、 cat ${file_path}|while read line do cmd done 方式三、 while read line do cmd done<file
③防止腳本中斷的方法
1
2
3
|
一、sh
while
.sh &
二、nohup /server/scripts/uptime.sh &
三、screen,保持會話
|
五、函數
①語法
1
2
3
4
|
#!/bin/bash
oldboy(){
echo
"Hello world"
}
|
注:oldboy爲定義的函數,執行時不須要帶小括號,函數定義及函數體必須在要執行的函數名的前面定義
②帶參數的函數執行方法
1
2
3
4
|
在函數體中位置參數($一、$二、$3...$#、$*以及$@)均可以是函數的參數。
父腳本的參數臨時被函數參數所掩蓋或隱藏。
$0比較特殊,他仍然是父腳本的名稱。
當函數完成時,原來的命令行參數會恢復
|
#!/bin/bash function oldboyedu(){ echo "Hello world" echo $0 echo $1 echo $2 exit } etiantian(){ echo "good" return 3 echo 'bad' } #oldboyedu hanshu1 hanshu2 oldboyedu $1 $2 etiantian
③如何寫好函數腳本
1
2
3
|
#分層
#每個步驟能夠寫成一個函數
#每個功能分拆爲函數
|
④函數優點
把相同的程序段定義成函數,能夠減小程序代碼量。
增長程序的可讀、易讀性。
實現程序的功能模塊化。
六、shell數組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
x=(1 2 3)
# 打印全部數組內容
[root@oldboyedu scripts]# echo ${x[*]}
1 2 3
#打印數組元素
[root@oldboyedu scripts]# echo ${x[0]}
1
[root@oldboyedu scripts]# echo ${x[1]}
2
[root@oldboyedu scripts]# echo ${x[2]}
3
#打印數組長度
[root@oldboyedu scripts]# echo ${#x[@]}
3
[root@oldboyedu scripts]# echo ${#x[*]}
3
|
2、各個語句應用場景
if(取值判斷)
for(正常循環處理)語句最經常使用,
while(守護進程無限循環,小於1分鐘的任務均可以用while循環)
case(系統服務啓動腳本)
3、shell腳本調試
①要記得首先用dos2unix對腳本格式化。
②直接執行腳本根據報錯來調試,有時報錯不許確。
③sh -x調試整個腳本,顯示執行過程。
④set -x和set +x調試部分腳本(在腳本中設置)
⑤echo輸出變量及相關內容,而後緊跟着exit退出,不執行後面程序的方式,一步步跟蹤腳本,對於邏輯錯誤比較好用。
寫法:echo $var;exit
⑥最關鍵的是語法熟練、編碼習慣、編程思想,將錯誤扼殺在萌芽之中,減輕調試負擔,提升效率
4、控制循環結構中的走向
命令 |
說明 |
break n |
n表示跳出循環的層數,若是省略n表示跳出整個循環 |
continue n |
n表示退出到第n層繼續循環,若是省略n表示跳過本次循環,忽略本次循環的代碼,進入循環的下一次循環 |
exit n |
退出當前shell程序,n爲返回值,n也能夠省略,在下一個shell裏經過$?接收這個n的值 |
return n |
用在函數裏,做爲函數的返回值,用於判斷函數執行是否正確,和exit同樣,若是函數裏有循環,也會直接退出循環,退出函數 |
一、 break 跳出整個循環,繼續循環後面的程序執行二、 continue 結束本次循環,繼續下一次循環三、 exit 退出整個腳本