case条件判断
case语句和if...elif...fi语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if可以判断多种条件关系
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for循环
语法1和语法2的区别在于是否提前知道循环的格式
语法1
for 变量 in 值1 值2 值3...
do
执行程序
done
#!/bin/bash
for item in morning noon afternoon evening
do
echo "This is $item !"
done
批量解压缩脚本
#!/bin/bash
#批量解压缩脚本
cd /tmp
ls *.sh > ls.log
for item in $(cat ls.log)
do
echo $item
filename=${item%.sh}
echo $filename
tar -zcvf "$filename.tar.gz" $item &>/tmp/tarls.log
done
rm -rf ls.log
语法2
for (( 初始值;循环控制条件;变量变化 ))
do
程序执行
done
实例1【从1加到100】
#!/bin/bash
#从1加到100
s=0;
for((i=1;i<101;i++))
do
s=$(($s+$i))
done
echo "1+100=$s"
实例2【批量添加用户】
#!/bin/bash
#批量添加用户
read -p "please input user name:" -t 30 name
read -p "please input the number of users:" -t 30 number
read -p "please input the password of users:" -t 30 password
echo $name
echo $number
echo $password
#判断变量是否为空
if [ ! -z $name -a ! -z $number -a ! -z $password ]
then
#sed匹配正则,以数字开头并以数字结尾
y=$(echo $number | sed 's/^[0-9]*$//g')
#判断输入是数量是否为纯数字
if [ -z $y]
then
for((i=0;i<$number;i++))
do
$(useradd $name$i &>/dev/null)
$(passwd --stdin $name$i $password &>/dev/null)
done
else
echo '输入的number不是纯数字'
fi
else
echo '输入的name&number&password存在为空项'
fi
while循环
while循环是不定循环,也称作条件循环 。只要条件判断式成立,循环就会一直继 续,直到条件判断式不成立,循环才会停 止。这就和for的固定循环不太一样了
while [ 条件判断 ]
do
执行程序
done
#!/bin/bash
#从1加到100
i=1
s=0
while [ $i -le 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done
echo "1+100=$s"
until循环
until循环,和while循环相反,until循环时 只要条件判断式不成立则进行循环,并执 行循环程序。一旦循环条件成立,则终止 循环。
until [ 条件判断 ]
do
执行程序
done
#!/bin/bash
i=1
s=0
until [ $i -gt 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done
echo "1+100=$s"