大綱:
1、邏輯判斷
2、if流程控制語句
3、for循環控制語句
----------------------------------------------
在開始之前,先了解一下邏輯判斷符號:
&& 與、|| 或、! 非
A && B 必須A,B同時成立,才能通過判斷
---> 判斷流程:先執行A判斷其是否成立,若成立,則繼續執行B,判斷其是否成立
---> 若不成立,則直接結束,不再執行B
A || B A、B有一個成立,即可通過判斷
!A 若A不成立,則通過判斷
----------------------------------------------
----------------------------------------------
在條件判斷時,那面會比較數值或字符串,這是我們會用到一些參數和符號,如下:
比較數值:
等於 ---> –eq
不等於 ---> –ne
小於 ---> –lt
大於 ---> –gt
小於等於 ---> –le
大於等於 ---> –ge
一些英文單詞:幫助記憶
equal等於、not equal、less than、great than
比較字符串:
= 等於、== 等於,同=、!= 不等於、> 大於、<小於、-z字符串為空、-n字符串非空null
注意:在[]結構中,<和>需要使用轉義符號,如下圖
實戰1:判斷當前系統語言環境
[root@xiaogan 02]# echo $LANG
en_US.UTF-8
[root@xiaogan 02]# echo $LANG | awk -F . '{print $1}'
en_US
[root@xiaogan 02]# vim lang.sh
[root@xiaogan 02]# sh -x lang.sh
++ echo en_US.UTF-8
++ awk -F . '{print $1}'
+ language=en_US
+ '[' en_US = en_US ']'
+ echo 'The Default Language is English.'
The Default Language is English.
[root@xiaogan 02]# cat lang.sh
#!/bin/bash
# judged if the System Default Language is English
language=$(echo $LANG | awk -F . '{print $1}')
if
[ $language = 'en_US' ]
then echo "The Default Language is English."
else echo "You are wrong!"
fi
[root@xiaogan 02]#
----------------------------------------------
if流程控制語句
if語句有三種使用方式:
格式如下:
單分支:
if 條件判斷語句
then 執行語句
fi
雙分支:
if 條件判斷語句
then 執行語句
else 執行語句
fi
多分支:
if 條件判斷語句
then 執行語句
else 執行語句
fi
##################################
實戰1:if單分支--->應用
源碼如下:
#!/bin/bash
# if
# then
# fi
if [ ! -d /root/cdrom ]
then echo "/root/cdrom is not exist!"
fi
##################################
實戰2:if雙分支應用--->pinghost.sh
ping -c 3 -i 0.2 -w 3 192.168.0.1
-c 發送數據包個數
-i 數據包每次發送間隔時間,默認單位:秒(s)
-w 等待時間,超過返回失敗
源碼如下:
#!/bin/bash
# ping a given host and print the host status
ping -c 3 -i 0.2 -w 3 $1 >>/dev/null #-c count -i -w wait
if [ $? -eq 0 ]
then echo "the host $1 is up."
else echo "the host $1 is down."
fi
##################################
實戰3:if多分支應用--->判斷數值區間 num_where.sh
源碼如下:
#!/bin/bash
# judged the input score
read -p "input you score(0-100):" num
if [ $num -gt 85 ] && [ $num -lt 100 ]
then echo "Great! Good Good Study!!"
else echo "Day Day Up!"
fi
##################################
實戰4:if嵌套使用
編寫腳本,監控服務運行狀態,
啟動失敗后,保存日志,並重啟服務,
再次失敗,提示重啟主機
源碼如下:
#!/bin/bash
systemctl status $1 >>/var/log/ser.log
if [ $? -eq 0 ]
then echo "the $1 is running."
else echo "the $1 is dead."
systemctl start $1 >>/dev/null
if [ $? -eq 0 ]
then echo "Reboot finish!"
systemctl restart $1
else echo "Warnning You to Reboot your server!"
fi
fi
##################################
實戰5:查詢內核版本,並輸出信息
源碼如下;
#!/bin/bash
# search the major version of System, and print info.
prime=$(uname -r | awk -F . '{ print $1}')
if [ $prime -gt 2 ]
then echo "The major version of System is $prime."
elif [ $prime -lt 1 ]
then echo "The System is too low."
else echo "Failed!"
fi
----------------------------------------------
for循環控制語句
用法:
for 變量名 in 變量遍歷列表
do
循環語句
done #循環結束表示
##################################
實戰:用戶管理(批量添加用戶)
方法一:
運行環境:
輸出結果:
批量刪除用戶:
方法一優化:
我們發現,在用方法一批量添加用戶是,當用戶不存在時,會有報錯信息。查看運行過程如下:
sh –x for01_useradd.sh
在進入循環后,我們會首先查找/etc/passwd下,是否已存在用戶$user,
但是,在運行過程中,我們發現,當這個用戶不存在時user_a數值為空,判斷條件就會少了一個比較值,而造成判斷條件變為:[ = xiaogan ],這是系統就會報錯!
為了避免系統報錯,我們可使用-z 或 -n選項來判斷user_a變量是否為空。
執行結果如下:
方法二:我們也可以采取另外一種方法,來批量添加用戶
各方法源碼如下:
方法一:
#useradd.sh
#!/bin/bash
userlist=$( cat user.list )
for user in $userlist
do
user_a=$(grep -w "$user" /etc/passwd | awk -F : '{print $1}' )
if
[ $user_a = $user ]
then
echo "The user $user is already exist."
else
useradd $user #2>>/dev/null
echo "User $user is added."
fi
done
###########
#userdel.sh
#!/bin/bash
userlist=$( cat user.list )
for user in $userlist
do
userdel -r $user 2>>/dev/null
if [ $? = 0 ]
then
echo "The user $user is deleted!"
fi
done
優化:
#useradd.sh
#!/bin/bash
userlist=$( cat user.list )
for user in $userlist
do
user_a=$(grep -w "$user" /etc/passwd | awk -F : '{print $1}' )
if
# [ $user_a = $user ]
[ ! $user_a -z ] && [ $user_a = $user ]
# To determine whether user_a is empty, not empty in to continue
then
echo "The user $user is already exist."
else
useradd $user #2>>/dev/null
echo "User $user is added."
fi
done
方法二:
#new useradd.sh
#!/bin/bash
# Batch add user by scripts
# the new method
userlist=$( cat user.list )
for user in $userlist
do
useradd $user 2>>/dev/null
if
[ $? -eq 0 ]
then
echo "123456" | passwd --stdin $user >> /dev/null
echo "Useradd Success!"
else
echo "The user $user is already exists."
fi
done
##################################
實戰:ping.sh #批量測試IP地址是否連通
#!/bin/bash
ip_list=$( cat ip.list )
for ip in $ip_list
do
ping -w 3 -c 3 -i 0.2 $ip >>/dev/null
if [ $? -eq 0 ]
then echo "the $ip is up."
else echo "the $ip is down."
fi
done