(34)for循环

格式1:

for 变量 in 值1 值2 值3
do
程序
done

例1.打印时间

脚本内容

#!/bin/bash
#Author:yuzai
for time in morning noon afternoon evening
  do
    echo “This time is $time!”
  done

脚本执行结果

[root@lhh98330]# chmod 755 test4.sh 
[root@llhh98330]# ./test4.sh 
“This time is morning!”
“This time is noon!”
“This time is afternoon!”
“This time is evening!”

PS.这种方法看起来很笨,需要把循环次数写入for,但是在系统管理的时候,当我们不确定循环次数的时候(如下面的例子),这个时候这种方法就有一种好处,循环变量只要是由空格、回车、制表符分隔的(和cat,ls等命令结合使用,cat命令执行之后显示的结果就是由回车隔开的)。

例2.批量解压缩(不知道循环次数)

#!/bin/bash
#Author:yuzai
ls *.tar.gz > ls.log  #将所有以.tar.gz结尾的文件输出覆盖到ls.log文件
for i in $(cat ls.log)
        do
        tar -zxf $i $>/dev/null
        done
rm -rf /lamp/ls.log

例3.计算文件个数(不知道循环次数)

#!/bin/bash
#Author:yuzai
cd /root/sh
ls *.sh > ls.log
y=1
for i in $(cat ls.log)
        do
        echo $y
        y=$(($y+1))
        done
rm -rf ls.log

格式2:

for ((初始值;循环控制条件;变量变化))
do
程序
done

例1.从1加到100(知道循环次数)

#!/bin/bash
#Author:yuzai
s=0
for ((i=1;i<=100;i=i+1))
        do
                s=$(($s+$i))
        done
echo "The sum of 1+2+...+99+100 is $s!"

例2.批量创建用户

#!/bin/bash
#Author:yuzai
read -p "Please input user name: " -t 30 name   #输入用户名,等待时间30s
read -p "Please input the number of users: " -t 30 num  #输入创建用户个数,等待时间30s
read -p "Please input the password of users: " -t 30 pass       #输入用户密码,等待时间30s
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]      #判断输入信息是否为空 
then
    y=$(echo $num | sed s/'^[0-9]*$'//g)    #这里是判断输入的用户个数是否为数字,sed后也可以把^[0-9]*$换为's/[0-9]//g'
    if [ -z "$y" ]  #如果上一条语句输出不为空,就是输入的用户个数为数字,继续执行
    then
     for ((i=1;i<=$num;i=i+1)) #开始循环
       do
          /usr/sbin/useradd "$name$i" &>/dev/null #建立用户
           echo $pass | /usr/bin/passwd --stdin "$name$i" &>/dev/null      #设置用户密码,与用户名相同
             done
     fi
fi 

执行结果:

[root@laptop]# chmod 755 3.sh 
[root@laptop]# ./3.sh 
Please input user name: new
Please input the number of users: 3
Please input the password of users: 111
[root@laptop]# cat /etc/passwd
new1:x:1006:1008::/home/new1:/bin/bash
new2:x:1007:1009::/home/new2:/bin/bash
new3:x:1008:1010::/home/new3:/bin/bash

END

本文分享自微信公众号 - 生信real(hh98330),作者:鱼仔real

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (1)TBtools | 序列工具之序列信息提取

    ①reads:就是我们测序产生的短读序列,通常一代和三代的reads读长在几千到几万bp之间,二代的相对较短,平均是几十到几百bp。

    生信real
  • (29)字符截取命令awk

    上一节我们讲到cut是有局限性的:cut只能识别制表符,或者具体的分隔符(":"、","等)。当文件的分隔符是空格,我们就无法利用cut进行提取了,此时我们需要...

    生信real
  • grep及正则表达式

    生信real
  • vim里面用shell的插件

    用户3765803
  • antd3.x中的form

    最近在维护公司的中台erp系统,项目中js库用的是react,ui库用的是antd。平时还是喜欢自己写css,刚开始还是有点不太习惯直接上ui库做项目,觉得用a...

    _kyle
  • springMVC

    springmvc中有专用于页面跳转的controller,不会对请求做任何处理,直接跳转页面:     <!-- 对处理请求的controller进行映射 -...

    yawn
  • Spring如何整合Mybatis,源码不难嘛!

    还要从MapperScannerConfigurer 和SqlSessionFactoryBean 着手。

    温安适
  • 数据结构与前端(一)——栈

    每种数据结构都可以用很多种方式来实现,其实可以把栈看成是数组的一个子集,所以这里使用数组来实现

    前端迷
  • 三种项目模式下 后端将Javabean数据 转为json数据

    前提说明为了演示的一致性,将返回数据进行的统一,编写一个统一返回数据类,一般返回的数据包括code 状态码,是否成功 true ,false ,自定义信息,及最...

    猎户星座1
  • 010.Kubernetes二进制部署kube-controller-manager

    本实验部署一个三实例 kube-controller-manager 的集群,启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 le...

    木二

扫码关注云+社区

领取腾讯云代金券