Shell字符串對比
1.字符串比對荣病,字符串必須使用雙引號
[ "name" = "name" ]
[ "name" != "name" ]
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1
[root@web ~]# [ "$USER" != "alex" ]
[root@web ~]# echo $?
0
- -z字符串為空副渴,輸出正確 -n字符串為非空蓝晒,輸出正確
[root@web ~]# name=""
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
0
[root@web ~]# [ ! -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# name="alex"
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# [ -n $name ]
[root@web ~]# echo $?
0
- -z 案例:
read -p "請輸入名字" name1
[ -z $name1 ] && echo "請輸入姓名否則不繼續(xù)執(zhí)行" && exit
read -p "請輸入年齡" age1
echo $name1 $age1
Shell正則比對
- [[ ]]
[[]]
[root@web01 scripts]# [ "$USER" = "root" ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ ^r ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ ! "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
1
2.判斷傳參的參數(shù)是否為整數(shù)
方法一:
[root@web01 scripts]# age=188
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# age=188q
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
1
[root@web01 scripts]# age=18.8
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
1
方法二:
expr $1 + 0 >/dev/null 2>&1
[ $? -ne 0 ] && exit
多整數(shù)比對
-
-a and
-o or[ 10 -eq 10 -a 100 -ne 100 ] [root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ] [root@web01 scripts]# echo $? 1 [root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ] [root@web01 scripts]# echo $? 0 [root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ] [root@web01 scripts]# echo $? 0 [root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]] [root@web01 scripts]# [[ 10 -eq 10 -a 100 -ne 100 ]] -bash: 條件表達式中有語法錯誤 -bash: `-a' 附近有語法錯誤 [root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]] [root@web01 scripts]# echo $? 1 [root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]] [root@web01 scripts]# echo $? 0
2.案例:傳入兩個數(shù)字 比對兩個數(shù)字的大小
例如:sh count.sh 10 10 要求判讀是否傳入兩個參數(shù) 要求數(shù)字加判讀是否為整數(shù)(禁止if)
? 10=10
#!/bin/sh
[ $# -ne 2 ] && echo "please input two number" && exit
[[ ! $1 =~ ^[0-9]+$ ]] && echo "請輸入整數(shù)" && exit 50
[[ ! $2 =~ ^[0-9]+$ ]] && echo "請輸入整數(shù)" && exit 100
[ $1 -eq $2 ] && echo "$1=$2"
[ $1 -gt $2 ] && echo "$1>$2"
[ $1 -lt $2 ] && echo "$1<$2"
3.案例:批量創(chuàng)建用戶 批量創(chuàng)建10個用戶 oldboy1 oldboy2 oldboy3...oldboy10
要求密碼統(tǒng)一設置為123456
1.輸入用戶的前綴oldboy氢烘,判斷如果為空 則退出
2.輸入需要創(chuàng)建用戶的個數(shù) 10烦却,判斷是否為整數(shù)
#!/bin/sh
#read -p "please input prefix: " name
#read -p "創(chuàng)建的個數(shù): " num
for i in {1..10}
do
echo oldboy$i
done
[root@web01 scripts]# cat useradd.sh
#!/bin/sh
read -p "please input prefix: " name
read -p "創(chuàng)建的個數(shù): " num
for i in `seq $num`
do
useradd $name$i >/dev/null 2>&1
echo 123456|passwd --stdin $name$i &>/dev/null
[ $? -eq 0 ] && echo "$name$i create is ok"
done
4.案例:判斷當前10.0.0.0/24網(wǎng)絡中 有哪些IP地址在線 ping通則在線
#!/bin/sh
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
for i in `seq 254`
do
{ IP=10.0.0.$i
ping -c 1 -W 1 $IP >/dev/null 2>&1
[ $? -eq 0 ] && action "ping $IP is" /bin/true
} &
done
網(wǎng)絡知識
ip addr add 10.0.0.3/24 dev eth0 臨時生效 重啟失效
面試題 配置一條默認網(wǎng)關
route add default gw 10.0.0.254
刪除網(wǎng)關
route add default gw 10.0.0.254
其他方法 靜態(tài)路由方式
ip route add 0/0 via 10.0.0.254
策略路由
服務器使用vpn常用 網(wǎng)關被替換成vpn
pptpstup 撥號命令
查看網(wǎng)關
route -n
開機啟動配置文件(/etc/rc.local) +x 權限 rc.d/rc.local (禁止使用alias和變量)
if判斷
1.單分支
if [你有房];then [ -f file ] && echo ok
if [你有房]
then
我就嫁給你
fi
雙分支
if [ 你有房 ] [ -f file ] && echo ok || echo error
then
我就嫁給你
else
拜拜
fi
2.多分支
if [ 你有房 ]
then
我就嫁給你
elif [ 你有錢 ]
then
我也嫁給你
elif [ 你爸是李剛 ]
then
我也嫁給你
elif [ 活好!運維技術好 ]
then
我倒貼也嫁給你
elif [ 你在老男孩學運維 ]
then
我考慮考慮
else
拜拜
fi
3.案例:輸入兩個數(shù)字 是否為整數(shù) 使用if方式
#!/bin/bash
read -p "請輸入第一個數(shù)字:" num1
read -p "請輸入第二個數(shù)字:" num2
if [ -z $num1 ]
then
echo "您輸入的第一個數(shù)字為空"&& exit
elif [ -z $num2 ]
then
echo "您輸入的第二個數(shù)字為空"&& exit
elif [[ "$num1" =~ ^[0-9]+$ && "$num2" =~ ^[0-9]+$ ]]
then
if [ $num1 -lt $num2 ]
then
echo "$num1<$num2"
elif [ $num1 -gt $num2 ]
then
echo "$num1>$num2"
else
echo "$num1=$num2"
fi
else
echo "您輸入了錯誤的值执桌!"&& exit
fi
4.案例:根據(jù)操作系統(tǒng)不同的版本安裝不同的源
1.如何取出版本號
2.如何做版本號的比對
3.比對完成執(zhí)行相對應的安裝源
#!/bin/sh
ve=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
#centos6.x使用以上命令獲取不到版本號
if [ ${ve%%.*} -eq 7 ]
then
#判斷網(wǎng)絡是否通暢ping 如果不通 則重啟systemctl restart network 通繼續(xù)執(zhí)行
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#測試wget是否已安裝 無安裝先安裝wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
elif [ ${ve%%.*} -eq 6 ]
then
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
fi
5.案例:猜數(shù)字
生成一個隨機數(shù) 1-100之間
RANDOM 隨機數(shù)的范圍 0-32767
取余
echo $((RANDOM%100+1))
用戶輸入一個數(shù)字
判斷用戶輸入的數(shù)字如果相等則退出提示猜對了 大了 提示比隨機數(shù)大 小了 提示 比隨機數(shù)小
#!/bin/sh
ran=`echo $((RANDOM%100+1))`
while true
do
let i++
read -p "請輸入一個數(shù)字[1-100]: " num
if [ $num -gt $ran ];then
echo "你輸入的數(shù)字大了"
elif [ $num -lt $ran ];then
echo "你輸入的數(shù)字小了"
else
echo "恭喜你猜對了 總共猜了 $i 次"
exit
fi
done