栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

shell脚本之for循环语句

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shell脚本之for循环语句

目录

一、for循环语句

1.1.列表循环

(1)格式1

(2)格式2

(3)案例

1.2.不带列表循环

(1)格式

(2)案例

1.3.类C风格的for循环

(1)格式

(2)案例

1.4.for循环案列


一、for循环语句

语法结构

列表循环不带列表循环类c风格的for循欢

1.1.列表循环

(1)格式1
for 变量名 in {list}
do
    command
done

示例:

①:

②:

 ③:

 ④:

 (2)格式2
for 变量名 in a b c
do
    command
done

示例:

①:

 ②:

 (3)案例

①:打印1-5这5个数字。

[root@server ~]# vim for.sh

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

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

[root@server ~]# vim for.sh

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

③:打印abcde。

[root@server ~]# vim for.sh

#!/bin/bash
for i in a b c d e
do
   echo $i
done

④:输出0-50之间的偶数。

[root@server ~]# vim for1.sh

#!/bin/bash
for i in {0..50..2}  //..2代表步长为2,每隔2个
do
    echo $i
done

⑤:花括号{}和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的偶数,中间为步长

1.2.不带列表循环

(1)格式
for 变量名 
do
   command
done

(2)案例

打印hello

第一种:

[root@server ~]# vim for2.sh 

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

[root@server ~]# . for2.sh      //没有给脚本传参所以执行了没有结果
[root@server ~]# . for2.sh a   //把a赋值给变量i,i有值了它就开始执行do..done了
hello

第二种:

#!/bin/bash
for i
do
        echo $i
done
[root@client ~]# bash for.sh hello
hello

1.3.类C风格的for循环 (1)格式
for ((expr1;expr2;expr3))
do
    command
done

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

①:打印1-5

[root@server ~]# vim for3.sh

#!/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-10的奇数

[root@server ~]# vim for3.sh

#!/bin/bash
for ((i=1;i<=10;i+=2))   
do
     echo $i
done




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

③:计算1-100的奇数和

[root@server ~]# vim for3.sh 

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

1.4.for循环案列

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

(1)以后缀批量变化添加

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

(2)脚本批量添加用户

#!/bin/bash
ULIST=$(cat /root/users.txt) 

for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null 
done

批量删除用户的脚本

#!/bin/bash
ULIST=$(cat /root/users.txt) 
for UNAME in $ULIST
do
userdel -r $UNAME &>/dev/null 
done

例2、根据 IP 地址列表检查主机状态
-c 发送包的数量;-i 发送 ping 包间隔;-W 超时时间

(1)根据文本查看

#!/bin/bash
HLIST=$(cat /root/ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null

if [ $? -eq 0 ] then
    echo "Host $IP is up."
else
    echo "Host $IP is down."
fi 
done

(2)根据段查看

network="192.168.10"
for addr in {1..254}
do
ping -c 2 -i 0.5 -W 3 $network.$addr &> /dev/null
        if [ $? -eq 0 ];then
        echo "$network.$addr is up"
        else
        echo "$network.$addr is down"
        fi
done

例3、用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警。

#!/bin/bash
init=123456
for i in {1. .3}
do
read -p "请输入密码: "pass
if [ $pass == $init ] ; then
echo "密码正确"
exit
fi
done
echo "警官:密码错误"

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/730326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号