for循环

for i in [取值列表]
do
    [循环体]
done
  • 取值列表 : {1..10},$(ls),字符串,都可以成为取值列表
  • 循环体 : 可以使用$i获取循环变量的结果,在循环体部分可以执行需要循环的命令

案例1:测试1-255有多少个IP地址在线(能ping通则在线)10.0.0.1-10.0.0.255

#/bin/sh

for i in {1..255}
do
#开启多线程
    {
        ping -c2 -W1 10.0.0.$i > /dev/null 2>&1
        [ $? -eq 0 ] && echo 10.0.0.$i
    }&
done
#等待多线程完成
wait
echo 'ok'

案例2:批量创建10个用户,前缀home1..home10,输入用户处加判断是否为空,创建用户个数判断是否是整数,用户密码统一使用123456

#/bin/sh

read -p 'input name' name
[ -z $name ] && echo null && exit
read -p 'input num' num
[[ ! $num =~ ^[0-9]+$ ]] && echo not int && exit
for i in `seq $num`
do
    #添加用户
    #useradd $name$i;echo 123456|passwd --stdin $name$i
    #删除用户
    userdel -r $name$i
done

if判断

  • 单分支,一个条件,一个结果
#/bin/sh

if [ 0 -eq 0 ]
then
    echo "yes"
fi
  • 双分支,一个条件,两个结果
#/bin/sh

if [ 0 -eq 0 ]
then
    echo "yes"
else
    echo "no"
fi
  • 多分支,多个条件,多个结果
#/bin/sh

if [ 0 -lt 0 ];then
    echo "yes1"
elif [ 1 -lt 0 ];then
    echo "yes2"
elif [ 2 -gt 0 ];then
    echo "yes3"
else
    echo "no"
fi

案例1:判断输入的两个数字的大小输出结果

#/bin/sh

read -p "输入两个整数" num1 num2

if [ $num1 -eq $num2 ]
then
    echo 'num1=num2'
elif [ $num1 -lt $num2 ]
then
    echo 'num1<num2'
elif [ $num1 -gt $num2 ]
then
    echo 'num1>num2'
fi

案例2:猜随机数,如果你输入的小了则提示小了大了就提示大了如果成功则提示猜对了

#/bin/sh

num=`echo $RANDOM%10|bc`

while true
do
read -p "输入你猜的数: " number
let i++
if [ $number -gt $num ];then
    echo "大了"
elif [ $number -lt $num ];then
    echo "小了"
else
    echo "猜对了一共猜了$i次"
    exit
fi
done