一岳掐、字符串比對(duì)
字符串必須使用雙引號(hào)
-n //nozero 字符串長度不為0時(shí)為真
-z //zero 字符串長度為0時(shí)為真
[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
二凭疮、正則比對(duì)
正則比對(duì)必須用[[]]
~是匹配的意思
[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
三、多整數(shù)比對(duì)
-a and 并且 正則比對(duì)里用&&
-o or 或者 正則比對(duì)里用||
案例一:批量創(chuàng)建用戶 批量創(chuàng)建10個(gè)用戶 oldboy1 oldboy2 oldboy3...oldboy10
要求密碼統(tǒng)一設(shè)置為123456
1.輸入用戶的前綴 oldboy
判斷如果為空 則退出
2.輸入需要?jiǎng)?chuàng)建用戶的個(gè)數(shù) 10
判斷是否為整數(shù)
#!/bin/sh
read -p "please input prefix: " name
read -p "創(chuàng)建的個(gè)數(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
四串述、if判斷
案例:輸入兩個(gè)數(shù)字执解,是否為整數(shù),并判斷大小
#!/bin/bash
read -p "請(qǐng)輸入第一個(gè)數(shù)字:" num1
read -p "請(qǐng)輸入第二個(gè)數(shù)字:" num2
if [ -z $num1 ]
then
echo "您輸入的第一個(gè)數(shù)字為空"&& exit
elif [ -z $num2 ]
then
echo "您輸入的第二個(gè)數(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 "您輸入了錯(cuò)誤的值纲酗!"&& exit
fi
五衰腌、case流程語句
案例:批量刪除用戶
#!/bin/sh
read -p "請(qǐng)輸入用戶名前綴: " prefix
read -p "請(qǐng)輸入要?jiǎng)h除幾個(gè)用戶: " num
for i in `seq $num`
do
echo $prefix$i
done
read -p "你確定要?jiǎng)h除以上用戶嗎?[y|yes|YES|n|N|no]" ready
for n in `seq $num`
do
name=$prefix$n
case $ready in
y|yes|YES)
id $name &>/dev/null
if [ $? -eq 0 ];then
userdel -r $name
[ $? -eq 0 ] && echo "$name del is ok"
else
echo "id: $name: no such user"
fi
;;
n|N|no)
echo "不刪除我玩啥呢?" && exit
;;
*)
echo "USAGE $0 [y|yes|YES|n|N|no]"
esac
done
六、for循環(huán)
案例:使用for循環(huán)從1加到100
#!/bin/bash
#Author
for i in {1..100}
do
sum=$[sum+i]
done
echo $sum
命令行
for i in `seq 100`;do sum=$[sum+i];done;echo $sum
七觅赊、while循環(huán)
案例:使用while循環(huán)從1加到100
#!/bin/bash
#Author
i=0
while [ $i -le 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum
案例:統(tǒng)計(jì)行號(hào)
while read line line 變量名 按行讀取文件的內(nèi)容
#!/bin/bash
#Author
while read line
do
let i++
done</etc/passwd
echo $i
八右蕊、流程控制語句 exit break continue
exit 退出整個(gè)腳本 不會(huì)繼續(xù)執(zhí)行
break 跳出本次循環(huán) 繼續(xù)往下執(zhí)行 跳出循環(huán)體
continue 結(jié)束當(dāng)前此次的命令,繼續(xù)下一次循環(huán)
#!/bin/sh
while true
do
echo ok
exit
echo hehe
done
echo done......
#!/bin/sh
while true
do
echo ok
break
echo hehe
done
echo done......
#!/bin/sh
while true
do
echo ok
continue
echo hehe
done
echo done......
九、函數(shù)
命令的集合 完成特定功能的代碼塊
模塊化 復(fù)用
函數(shù)和變量類似 只有先定義才可以調(diào)用,如果只定義不調(diào)用 則不會(huì)執(zhí)行
函數(shù)的定義和調(diào)用
三種方法
[root@web scripts]# cat fun.sh
#!/bin/sh
test1(){
echo "第一種函數(shù)定義方式"
}
function test2(){
echo "第二種函數(shù)定義方式"
}
function test3 {
echo "第三種函數(shù)定義方式"
}
test1
test2
test3
函數(shù)的傳參 不能直接傳參
1.在函數(shù)名后面跟參數(shù)
2.全局配置 在函數(shù)最上面設(shè)置變量
3.local 只在函數(shù)體內(nèi)部生效
[root@web scripts]# cat fun.sh
#!/bin/sh
fun(){
if [ -f $1 ];then
echo "$1 exists"
else
echo "$1 no exists"
fi
}
fun $2 $3
#!/bin/sh
fun(){
num=20
for i in `seq 10`
do
sum=$[num+i]
done
echo $sum
}
fun
#!/bin/sh
fun(){
num=20
for i in `seq $1`
do
sum=$[num+i]
done
echo $sum
}
fun $3 $1 $2
函數(shù)返回值 return
[root@web scripts]# cat fun3.sh
#!/bin/sh
fun(){
if [ -f $1 ];then
return 50
else
return 100
fi
}
fun $1
if [ $? -eq 50 ];then
echo "ok"
else
echo "error"
fi
函數(shù)內(nèi)如果執(zhí)行的上一條是函數(shù)名 則不會(huì)返回函數(shù)本身執(zhí)行的返回值
[root@web scripts]# cat fun4.sh
#!/bin/sh
fun(){
echo 50
return 1
}
re=`fun`
echo "函數(shù)的返回值是?: $?"
echo "函數(shù)執(zhí)行的結(jié)果是?: $re"
[root@web scripts]# sh fun4.sh
函數(shù)的返回值是?: 1
函數(shù)執(zhí)行的結(jié)果是?: 50
[root@web scripts]# cat fun4.sh
#!/bin/sh
fun(){
echo 50
return 1
}
re=`fun`
name=oldboy
echo "函數(shù)的返回值是?: $?"
echo "函數(shù)執(zhí)行的結(jié)果是?: $re"
[root@web scripts]# sh fun4.sh
函數(shù)的返回值是?: 0
函數(shù)執(zhí)行的結(jié)果是?: 50
坑:for循環(huán)可以區(qū)分空格
while循環(huán)按行讀取
在shell中調(diào)用系統(tǒng)的/etc/init.d/functions茉兰,先執(zhí)行這個(gè)文件尤泽,
在用action引用欣簇。