|NO.Z.00024|——————————|LinuxShell|——|Linux&Shell&流程控制.V05|——|for循环|

一、for循环
### --- 语法一

for 变量 in 值 1 值 2 值 3…
    do
        程序
    done
### --- for循环语法一:
~~~     for 循环是固定循环,也就是在循环时已经知道需要进行几次的循环,
~~~     有时也把 for 循环称为计数循环。for 的语法有如下两种:

~~~     # 注:
~~~     这种语法中 for 循环的次数,取决于 in 后面值的个数(空格分隔),
~~~     有几个值就循环几次,并且每次循环都把值赋予变量。
~~~     也就是说,假设 in 后面有三个值,for 会循环三次,
~~~     第一次循环会把值1 赋予变量,第二次循环会把值 2 赋予变量,以此类推。
### --- 语法二

for (( 初始值;循环控制条件;变量变化 ))
    do
        程序
    done
### --- 语法二中需要注意:

~~~     # 初始值:
~~~     在循环开始时,需要给某个变量赋予初始值,如 i=1;
~~~     # 循环控制条件:
~~~     用于指定变量循环的次数,如 i<=100,则只要 i 的值小于等于 100,循环就会继续;
~~~     # 变量变化:
~~~     每次循环之后,变量该如何变化,如 i=i+1。代表每次循环之后,变量 i 的值都加 1。
二、语法一:for循环实例
### --- 打印时间

[root@localhost ~]# vi sh/for.sh
#!/bin/bash
#打印时间
# Author: shenchao (E-mail: shenchao@atguigu.com)


for time in morning noon afternoon evening
        do
                echo "This time is $time!"
        done
### --- 批量解压脚本就应该这样写

root@localhost ~]# vi sh/auto-tar.sh
#!/bin/bash
#批量解压缩脚本
# Author: shenchao (E-mail: shenchao@atguigu.com)

cd /lamp
#进入压缩包目录
ls *.tar.gz > ls.log
#把所有.tar.gz 结尾的文件的文件覆盖到 ls.log 临时文件中
for i in $(cat ls.log)
#读取 ls.log 文件的内容,文件中有多少个值,就会循环多少次,每次循环把文件名赋予变量 i
        do
                    tar -zxf $i &>/dev/null
                    #加压缩,并把所有输出都丢弃
        done
rm -rf /lamp/ls.log
#删除临时文件 ls.log

三、语法二:实验举例

### --- 实例一:
~~~     那语法二就和其他语言中的 for 循环更加类似了,也就是事先决定循环次数的固定循环了。
~~~     先举个简单的例子:

#从1加到100
#!/bin/bash
#从 1 加到 100
# Author: shenchao (E-mail: shenchao@atguigu.com)

s=0
for (( i=1;i<=100;i=i+1 ))
#定义循环 100 次
        do
                s=$(( $s+$i ))
                每次循环给变量 s 赋值
        done
echo "The sum of 1+2+...+100 is : $s"
#输出 1 加到 100 的和
### --- 实例二:批量添加指定数量的用户

[root@localhost ~]# vi useradd.sh
#!/bin/bash
#批量添加指定数量的用户
# Author: shenchao (E-mail: shenchao@atguigu.com)


read -p "Please input user name: " -t 30 name
#让用户输入用户名,把输入保存入变量 name
read -p "Please input the number of users: " -t 30 num
#让用户输入添加用户的数量,把输入保存入变量 num
read -p "Please input the password of users: " -t 30 pass
#让用户输入初始密码,把输入保存如变量 pass

if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
#判断三个变量不为空
        then
        y=$(echo $num | sed 's/[0-9]//g')
        #定义变量的值为后续命令的结果
        #后续命令作用是,把变量 num 的值替换为空。如果能替换为空,证明 num 的值为数字
        #如果不能替换为空,证明 num 的值为非数字。我们使用这种方法判断变量 num 的值为数字
        if [ -z "$y" ]
        #如果变量 y 的值为空,证明 num 变量是数字
            then
            for (( i=1;i<=$num;i=i+1 ))
            #循环 num 变量指定的次数
                do
                    /usr/sbin/useradd $name$i &>/dev/null
                    #添加用户,用户名为变量 name 的值加变量 i 的数字
                    echo $pass | /usr/bin/passwd --stdin $name$i &>/dev/null
                    #给用户设定初始密码为变量 pass 的值
                done
        fi
fi
### --- 实例三:批量删除用户

[root@localhost ~]# vi sh/userdel.sh
#!/bin/bash
#批量删除用户
# Author: shenchao (E-mail: shenchao@atguigu.com)


user=$(cat /etc/passwd | grep "/bin/bash"|grep -v "root"|cut -d ":" -f 1)
#读取用户信息文件,提取可以登录用户,取消 root 用户,截取第一列用户名
for i in $user
#循环,有多少个普通用户,循环多少次
        do
                userdel -r $i
                #每次循环,删除指定普通用户
        done

 

 

 

 

 

 

 

 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示