Shell第三章《for循环》

语法结构:

for    变量名      [ in 取值列表 ]
do
循环体
done

需求:自动创建10个用户

#!/bin/bash
read -p "请输入你要创建的用户名:" name
read -p "请输入你要创建用户的数量:" num
for i in seq $num
do
useradd ${name}${i}
done
tail -$num /etc/passwd
[root@bogon ~]# sh user.sh
请输入你要创建的用户名:ccc
请输入你要创建用户的数量:3
ccc1:x:1014:1014::/home/ccc1:/bin/bash
ccc2:x:1015:1015::/home/ccc2:/bin/bash
ccc3:x:1016:1016::/home/ccc3:/bin/bash
[root@bogon ~]#

通过循环工具,探测全网主机。将在线主机记录在文本中。

思路:

1、编写一个常规的ping测试脚本(无循环)
2、添加循环语句 for i in {2..254}
3、优化脚本(让脚本后台执行,清空脚本,循环完成提示,wait间隔)

思路1:编写常规网络测试脚本

#!/bin/bash
ip=192.168.51.202
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo ${ip} | tee -a ip.txt
fi
[root@bogon ~]# sh ping.sh
192.168.51.202
[root@bogon ~]# cat ip.txt
192.168.51.202

思路2:因为测试对象多,所以使用循环。

#!/bin/bash
for i in {2..254}
do
ip=192.168.51.$i
ping -c1 -W1 ${ip} &> /dev/null
if [ $? -eq 0 ];then
echo ${ip} | tee -a ip.txt
fi
done
[root@bogon ~]# cat ip.txt
192.168.51.202
192.168.51.202
192.168.51.19
192.168.51.20
192.168.51.21
192.168.51.22
192.168.51.23

思路3:优化脚本(后台执行,清空脚本,wait间隔)

#!/bin/bash
>ip.txt ##清空文本
for i in {2..254}
do
{
ip=192.168.51.$i
ping -c1 -W1 ${ip} &> /dev/null
if [ $? -eq 0 ];then
    echo ${ip} | tee -a ip.txt
fi
}& ##后台运行
done
wait ##等待前一个程序执行完毕,在执行下一个
[root@bogon ~]# cat ip.txt
192.168.51.20
192.168.51.21
192.168.51.22
192.168.51.23
192.168.51.19
192.168.51.25
192.168.51.24
192.168.51.27
192.168.51.26
192.168.51.28
案例1: 通过用户列表文件创建用户
[root@localhost  scripts]# cat user.txt
qianqian
qianfeng
fengfeng
示例:
#!/bin/bash
for user in cat user.txt
do
useradd $user
echo "$user is created"
done
升级:
用户可以使用参数的形式,自定义用户名文件。
如果用户没有输入用户名文件,提示用户输入
如果用户输入的不是文件,提示用户更正。
启动循环创建用户
如果用户已经存在,提示存在
如果用户不存在,则创建成功,提示成功
[root@bogon ~]# cat user.txt
zhangshan
wangxu
likui
[root@bogon ~]#

#!/bin/bash
passwd=123
#判断脚本是否有参数
if [ $# -eq 0 ];then
      echo "usage:$0 filename"
      exit 1
fi
#判断用户输入的是否是文件
if [ ! -f $1 ];then
       echo "error filename"
       exit 2
fi
#设置循环,读取文件,创建用户
for user in cat $1
do
       id $user &> /dev/null
#如果用户不存在则创建用户,否则提示已存在
if [ $? -eq 0 ];then
echo "user $user already exists"
else
    useradd $user
    echo "passwd" | passwd --stdin $user &> /dev/null
#判断用户是否创建成功,并提示
if [ $? -eq 0 ];then
echo "user is created."
fi
fi
done

[root@bogon ~]# sh ccc.sh user.txt
user is created.

user is created.

user is created.

[root@bogon ~]#
[root@bogon ~]#
[root@bogon ~]# sh ccc.sh user.txt
user zhangshan already exists
user wangxu already exists
user likui already exists
[root@bogon ~]# sh ccc.sh
usage:ccc.sh filename

Original: https://www.cnblogs.com/Jqazc/p/16627780.html
Author: 我真的兔了
Title: Shell第三章《for循环》

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612254/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Goroutines (一)

    Goroutines CSP communicating sequential processes Go 语言中,每一个并发执行单元叫做一个goroutine,语法上仅需要在一个普…

    数据库 2023年6月16日
    089
  • Facade 外观(结构型)

    Facade 外观 (结构型) 一:描述: Facade 外观模式是为子系统至客户端之间提供简单的一致的接口,来降低耦合度。 二:模式图 三:实现代码简单例子: 1 、业务模块; …

    数据库 2023年6月11日
    0105
  • Jmeter环境变量配置你不得不知道的事情

    在安装Jmeter的过程中大家肯定需要配置环境,但是为什么要配置JDK的环境变量呢?大家有没有好奇过,有没有仔细去像一下呢,其实在安装Jmeter前,大家应该都知道Jmeter是我…

    数据库 2023年6月6日
    086
  • 2022-08-20 数据库连接池

    每次去初始化一个连接池,连接池中会有很多个连接等待被使用,使用完连接之后,不需要关闭连接,只需要把连接还回到连接池,还回到连接池的操作不需要我们手动控制。 数据库连接池负责分配、管…

    数据库 2023年6月14日
    096
  • 微服务架构项目搭建过程中的Mysql安装和相关问题

    搭建微服务架构的过程中需要使用Mysql数据库,Mysql数据库搭建着实不是一个容易的事情,会碰到各种各样的问题,如果没有一个安装数据库的思路真的很难把数据库安装好,并且掉入到安装…

    数据库 2023年6月6日
    056
  • MySQL 主从同步延迟监控

    MySQL5.7和8.0支持通过 replication_applier_status 表获同步延迟时间,当从库出现延迟后,该表中的字段 REMAINING_DELAY 记录延迟秒…

    数据库 2023年6月11日
    0108
  • FastDFS安装和简介详细总结

    1、fastDFS简介 1 FastDFS是用c语言编写的一款开源的分布式文件系统。 2 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用…

    数据库 2023年6月14日
    0113
  • 译文 | MySQL 8.0 密码管理策略(一)

    MySQL 8.0 在密码管理方面有很多改善,本文将介绍以下两个特性。 密码重用策略 生成随机密码 简单地说,当您设置新密码时,您可以限制使用以前使用的密码。有两种策略: [En]…

    数据库 2023年5月24日
    084
  • 从外包到互联网,加油,打工人!

    以下从公众号@BiggerBoy同步 Hello,大家好,我是walking。很久没有更新了,十分抱歉。 因为前几个月在忙两个事情,一个是练车考驾照,一个是准备面试,所以就没有时间…

    数据库 2023年6月11日
    066
  • Java集合详解

    Java集合 集合体系 Collection接口 Collection接口没有直接的实现子类,它的子接口list(有序容器,可以重复)和set(无序容器,不可重复)是两个重要的子接…

    数据库 2023年6月16日
    094
  • 事务的本质和死锁的原理・改

    由于一些错误操作和被爬的原因,我重新整理了 上一篇文章https://…

    数据库 2023年6月9日
    091
  • Nginx常见问题

    基于端口的虚拟机: 使用端口来区分,浏览器使用域名或ip地址:端口号 访问。 注意:~ 代表自己输入的英文字母。 16、location正则案例 1 #优先级1,精确匹配,根路径 …

    数据库 2023年6月14日
    0124
  • Redis——数据操作(2)

    2022-09-21 (2)hash操作: ①设置多个hash值,(hmset): 查看说明: help hmset hmset person name A age 1 ②获得多个…

    数据库 2023年6月14日
    070
  • Eureka详解系列(五)–Eureka Server部分的源码和配置

    按照原定的计划,我将分三个部分来分析 Eureka 的源码: 今天,我们来研究第三部分的源码。 分析的思路和第二部分的一样,先明确 Eureka Server 需要具备哪些功能,再…

    数据库 2023年6月6日
    082
  • 面试现场!月薪3w+的这些数据挖掘SQL面试题你都掌握了吗? ⛵

    💡 作者:韩信子@ShowMeAI📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40📘 AI 面试题库系列:https://www….

    数据库 2023年5月24日
    0102
  • 567.字符串中的排列

    滑动窗口 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2…

    数据库 2023年6月16日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球