sehll循环语句

一、for循环

在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。例如,根据通讯录中的姓名列表创建系统账号,根据服务器清 单检查各主机的存活状态当面对各种列表重复任务时,使用简单的 if 语句已经难以满足要求,而顺序编写全部代 码更是显得异常烦琐、困难重重。

for循环语句

一、for循环
1、语法结构
(1)列表循环
(2)不带列表循环
(3)类C风格的for循环

遍历格式

for 变量名 in {list}
do
    command
done

例子1

// {  } 里面不识别变量  
for i in {a..c}
do
        echo $i
done

例子2

//seq 5=1、2、3、4、5序列

for i in `seq 5`  
do      
        echo $i
done

例子3

//seq可以引用变量
a=10
for i in `seq $a`    
do
        echo $i
done

for 变量名 in a b c
do
    command
done

例子1 

//i这里实际没有调用,所以就相当于in后面几个参数就循环几次
for i in a b c   
do
        echo 123
done

例子2 

//这里调用到i变量了,所以就正常显示i的值(a\b\c)
for i in a b c    
do
        echo $i
done

1.1、案例


1.1.1、例1:打印1-5这5个数字

#!/bin/bash
read -p "第一种方法1 ,第二种方法2"  a
case  $a  in
1)
echo "这是第一种方法"
for i in  {1..5}
do
echo $i
done
;;
2)
echo "这是第二种方法"
for i in `seq 5`
do
echo $i 
done
;;

*)
echo "这是第二种方法"
for i in 1 2 3 4 5
do
echo $i
done
;;
esac

1.1.2、例2打印5次hello world

注意:虽然我们定义了一个变量i,但是没有使用它,它只是控制循环次数

#!/bin/bash
for i in {1..5}
do
echo "hello world"
done

1.1.3、例3:打印abcde

#!/bin/bash
for i in {a..e}
do
echo $i
done

1.1.4、例4:输出0-50之间的偶数

#!/bin/bash
for i in {0..50..2}
do
echo $i
done

附1

小技巧:花括号{}和seq在for循环的应用:

  • for i in {1..50..2} 1-50的奇数
  • for i in {2..50..2} 1-50的偶数
  • for i in {10..1}  1-10倒序排列
  • for i in $(seq 10)  1-10正序排列
  • for i in $(seq 10 -1 1) 1-10倒序排列
  • for i in $(seq 1 2 10) 1-10的奇数,中间为步长
  • for i in $(seq 0 2 10) 1-10的偶数,中间为步长
#!/bin/bash
for i in  $(seq 0 5 10)
do
echo $i
done

 

1.1.5、不带列表循环执行时由用户指定参数和参数的个数决定的

格式

for 变量名 
do
    command
done

1.1.5.1、 例1:打印hello

把2、4赋值给变量i,i有值了它就开始执行do..done了

#!/bin/bash
for i
do
echo $i "hello"
done

1.1.6、类C风格的for循环

格式

for ((expr1;expr2;expr3))
do
       command
done

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

1.1.6.1、打印1-5
#!/bin/bash
for ((i=1;i<=5;i++))
do
echo $i 
done

注:i++ : i=1+1 先赋值再运算 i=1 之后 再 +1
       ++i : 1+1=i 先运算再赋值 1+1 之后 再 =i

1.1.6.2、例2:打印1-10的奇数
#!/bin/bash
for ((i=1;i<=10;i+=2))
do
echo $i 
done

附2:

类C风格运算符用法
++    自身变量+1
--  自身变量-1
+=5    自身变量+5
-=5    自身变量-5
*=5    自身变量*5
/=5    自身变量/5
%=5    自身变量%5

1.1.6.3、例3:计算1-100的奇数和
#!/bin/bash
sum=0
for ((i=1;i<=100;i+=2))
do
let sum=$i+$sum
done
echo "1-100奇数 $sum"

1.1.6.4、例1、批量添加用户两种方式

1、以后缀批量变化添加

#!/bin/bash
for i in {1..5}
do
useradd stu$i
echo "123" | passwd -stdin stu$i
done

 2、脚本批量添加用户

zhang
wang
li
zhao
#!/bin/bash
USER=$(cat /opt/user.txt )
for name in $USER
do
useradd $name
echo "123" | passwd --stdin $name &>/dev/null
done

3、批量删除用户的脚本

1.1.6.5、例2、根据 IP 地址列表检查主机状态

-c 发送包的数量;-i 发送 ping 包间隔;-W 超时时间

1、根据文本查看

192.168.88.19
192.168.99.11
#!/bin/bash
LIST=$(cat /opt/pinghost.txt )
for ip in $LIST
do
ping -c 3 -i 0.2  -w 1  $ip  &>/dev/null
        if  [ $? = 0 ];then
        echo "可以ping通"
        else
        echo "不可以ping通"
        fi
done

2、根据段查看

#!/bin/bash
NETWORK=$1
for ip in {1..255}
do
ping -c 3 -i 0.2  -w 1  $NETWORK.$ip  &>/dev/null
        if  [ $? = 0 ];then
        echo "可以ping通"
        else
        echo "不可以ping通"
        fi
done

1.1.6.6、用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
PASSWD=123456
for ((i=1;i<=3;i++))
do
read -p  "请输入密码" passwd
if [[ $passwd ==  $PASSWD   ]];then
echo "正确"
exit
else
echo "密码错误"
fi
done
echo "操作过多"

1.1.6.7、幸运会员

二、while语句的结构

while循环
1、语法结构
2、死循环

(1)语法结构(3种)

while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环

语法结构

while 表达式
do
    command
done

2.1、例1:打印1-5

#!/bin/bash
i=0
while [[ $i -le 5 ]]
do
echo $i
let i++
done

2.2、输出1-100之间不能被3整除的数字

#!/bin/bash
i=0
while [[ $i  -le  100  ]]
do
if [[ $i%3 -eq 0  ]];then
let i++
else
echo   $i
let i++
fi
done

2.3、打印1-100的和

#!/bin/bash
i=0
sum=0
while [[ $i  -le  100  ]]
do
let  sum=$[sum+i]
let i++
done
echo $sum

注意:let  sum=$[sum+i]    “=” 不能分开

2.4、监控某服务(httpd)运行状态

2.5、while死循环

 写一个永远为真的表达式,1等于1这个条件永远为真,所以这个脚本会一直循环下去

格式

while [ 1 -eq 1 ]
do
    command
done

while true
do
    command
done

while :
do
    command
done

2.6、例1:猜数字,猜不对就一直猜

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值