shell脚本学习——for、while、until循环

一、for循环语句
1、列表循环

for variable in {list}
     do
           command
           command
           ...
     done
或者
for variable in a b c
     do
           command
           command
     done
eg  打印12345
#!/bin/bash
for i in {1..5}
  do
      echo $i
  done
  
{10..1..-1}   打印10到1
{1..100..2}   打印奇数
{0..100..2}   打印偶数
seq 10  打印1到10
seq 10 -1 1  打印10到1
seq 1 2 10 打印奇数

2、不带列表循环

for variable
     do
         command
         command
         ...
     done	

3、类C风格的for循环

for ((expr1;expr2;expr3))
    do
        command
        command
        ...
    done
for ((i=1;i<=5;i++))
    do
        echo $i
    done

expr1:定义变量并赋初值
expr2:决定是否进行循环(条件)
expr3:决定循环变量如何改变,决定循环什么时候退出

4、循环控制语句
循环体do…done之间的内容
continue:继续,表示循环体内的后面代码不执行,重新下一次循环
break:打断,停止循环,执行循环体后面的语句
exit:直接退出脚本

应用练习:
(一)计算100以内的奇数和

#!/bin/env bash
sum=0
for i in {1..100..2}
do
    let sum=$sum+$i
done
echo "1-100奇数和为:$sum"

(二)判断输入整数是否为质数

#!/bin/env bash
read -p "请输入一个正整数:" number
[ $number -eq 1 ] && echo "$number不是质数" && exit
[ $number -eq 2 ] && echo "$number是质数" && exit
for i in `seq 2 $[$number-1]`
    do
    [ $[$number%$i] -eq 0 ] && echo "$number不是质数" && exit
    done
echo "$number是质数"

(三)批量创建用户

#!/bin/env bash
grep -w ^class /etc/group &>/dev/null
test $? -ne 0 && groupadd class
for ((i=1;i<=5;i++))
   do
       useradd -G class u$i
       echo 123|passwd --stdin u$i
   done

1、批量新建5个用户stu1~stu5,要求用户的家目录在/rhome

#!/bin/bash
[ -f /rhome ] && mv /rhome /rhome.bak || [ ! -d /rhome ] && mkdir /rhome
for ((i=1;i<=5;i++))
do
   useradd -d /rhome/stu$i stu$i
   echo 123|passwd --stdin stu$i
done

2、局域网内脚本检查主机网络通讯

#!/bin/bash
ip=10.1.1
for ((i=1;i<=10;i++))
do
    ping -c1 $ip.$i &>/dev/null
    if [ $? -eq 0 ];then
       echo "$ip.$i is ok" >> /tmp/ip_up.txt
    else
       echo "$ip.$i is down" >> /tmp/ip_down.txt
    fi
done 

**脚本并发控制**
{程序}&表示将程序放入后台执行,等待程序执行完毕进行后面内容,需要wait
#!/bin/bash
ip=10.1.1
for ((i=1;i<=10;i++))
do
{
    ping -c1 $ip.$i &>/dev/null
    if [ $? -eq 0 ];then
       echo "$ip.$i is ok" >> /tmp/ip_up.txt
    else
       echo "$ip.$i is down" >> /tmp/ip_down.txt
    fi
}&
done
wait
echo "局域网内ip网络检测完毕"

二、while循环

   条件为真进入循环,条件为假退出循环
   语法结构
   while 表达式 
       do
          command...
       done
   
   while [ 1 -eq 1 ] 或者 (( 1 > 2 ))
       do
           command
           command
           ...
       done
 
 eg 脚本计算1-50偶数和
 #!/bin/bash
 sum=0
 i=2
 while [ $i -le 50 ]
   do
     let sum=$sum+$i
     let i+=2
   done
 echo "1-50偶数和为:$sum"

脚本同步系统时间
#!/bin/env bash
NTP=10.1.1.1
count=0
while true
do
   rdate -s $NTP &>/dev/null
   if [ $? -ne 0 ];then
      echo "system date failed" |mail -s "check system date" root@loaclhost
   else
      let count++
      if [$count -eq 100 ];then
      echo "system date success" |mail -s "check system date" root@localhost && count=0
      fi
   fi
sleep 30
done

三、until循环
条件为假进入循环,条件为真退出循环

语法结构
until expression [ 1 -eq 1 ] (( 1>=1 ))
     do
        command
        command
        ...
     done

eg 
#!/bin/bash
if [ -d /rhome ];then
   echo "/rhome目录已存在"
else
   mkdir /rhome
   echo "/rhome不存在,已完成创建"
fi

i=1
until [ $i -gt 10 ]
do
    if [ $i -le 5 ];then
        useradd -u $[1000+$i] stu$i
        echo 123|passwd --stdin stu$i
    else
        useradd -d /rhome/stu$i stu$i
        echo 123|passwd --stdin stu$i
    fi
let i++
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值