for循環(huán)
1.for循環(huán)格式
for 變量名 in [取值列表] 蘋果 香蕉 字符串 數(shù)字{}序列 命令
do
命令體
echo 呵呵
done
2.案例:使用for循環(huán)創(chuàng)建用戶
cat user.txt
zs
ls
em
oldboy
[root@web scripts]# cat for1.sh
#!/bin/sh
for i in `cat user.txt`
do
useradd $i
done
3.命令行中使用for循環(huán)批量刪除用戶
for i in `cat user.txt`;do userdel -r $i;done
4.案例2:使用for循環(huán) 從1加到100 結(jié)果5050
seq -s + 100|bc
[root@web scripts]# cat ping.sh
#!/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
for i in `seq 100`;do sum=$[sum+i];done;echo $sum
while 循環(huán)
1.while循環(huán)格式
while [ 條件表達(dá)式 ]
do
命令
done
2.案例: 1加到100
#!/bin/sh
i=0
while [ $i -le 100 ]
do
sum=$[i+sum]
let i++
done
echo $sum
3.流程控制語(yǔ)句 exit continue break
exit 退出整個(gè)腳本 不會(huì)繼續(xù)執(zhí)行
break 跳出本次循環(huán) 繼續(xù)往下執(zhí)行 跳出循環(huán)體
continue 結(jié)束當(dāng)前此次的命令,繼續(xù)下一次循環(huán)
4.exit continue break 舉例
[root@web scripts]# cat exit.sh break.sh continue.sh
#!/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......
5.案例2 break continue
#!/bin/sh
for i in `seq 10`
do
user=oldboy$i
id $user &>/dev/null
if [ $? -ne 0 ];then
useradd $user
[ $? -eq 0 ] && echo "$user create is ok"
else
break
fi
done
echo hehe.......
#!/bin/sh
for i in `seq 10`
do
user=oldboy$i
id $user &>/dev/null
if [ $? -ne 0 ];then
useradd $user
[ $? -eq 0 ] && echo "$user create is ok"
else
continue
fi
done
echo hehe.......
函數(shù)
- 命令的集合 完成特定功能的代碼塊
模塊化 復(fù)用
函數(shù)和變量類似 只有先定義才可以調(diào)用,如果只定義不調(diào)用 則不會(huì)執(zhí)行
2.函數(shù)的定義和調(diào)用
#!/bin/sh
test1(){
echo "第一種函數(shù)定義方式"
}
function test2(){
echo "第二種函數(shù)定義方式"
}
function test3 {
echo "第三種函數(shù)定義方式"
}
test1
test2
test3
3.函數(shù)的傳參 不能直接傳參
在函數(shù)名的后面跟參數(shù)
全局配置 在函數(shù)的最上面 設(shè)置變量
local 只在函數(shù)體內(nèi)部生效
fun(){
if [ -f $1 ];then
echo "$1 is exsis"
else
echo "$1 is no ex"
fi
}
fun $1
[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
[root@web scripts]# cat fun1.sh
#!/bin/sh
fun(){
num=20
for i in `seq $1`
do
sum=$[num+i]
done
echo $sum
}
fun $3 $1 $2
[root@web scripts]# cat fun1.sh
#!/bin/sh
fun(){
num=20
for i in `seq $1`
do
sum=$[num+i]
done
echo $sum
}
fun $1
echo $num
4.錯(cuò)誤 先定義 在調(diào)用
[root@web scripts]# cat fun1.sh
#!/bin/sh
fun $1
fun(){
num=20
for i in `seq $1`
do
sum=$[num+i]
done
echo $sum
}
函數(shù)的返回值 return
5.案例
#!/bin/sh
[ -f /etc/hosts ] && exit 50 || exit 100
#!/bin/sh
fun(){
if [ -f $1 ];then
return 50
else
return 100
fi
}
fun $1
re=$?
[ $re -eq 50 ] && echo "$1 該文件存在"
[ $re -eq 100 ] && echo "$1 該文件不存在"
6.函數(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