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)

大家都在看

  • 简单!代码原来是这样被CPU跑起来的

    CPU对我们来说既熟悉又陌生,熟悉的是我们知道代码是被CPU执行的,当我们的线上服务出现问题时可能首先会查看CPU负载情况。陌生的是我们并不知道CPU是如何执行代码的,它对我们的代…

    数据库 2023年6月6日
    071
  • MySQL实战45讲 1,2

    01 | 基础架构:一条SQL查询语句是如何执行的? Server 层 所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取。其架构模…

    数据库 2023年5月24日
    095
  • DRF补充数据库异常和Redis异常

    DRF补充数据库异常和Redis异常 (1)在项目适当位置新建exceptions.py,内容如下: from rest_framework.views import except…

    数据库 2023年6月14日
    053
  • SSM简单整合!!!

    3. 在maven中添加依赖 org.mybatis mybatis-spring 2.0.7 org.springframework spring-jdbc 5.3.2 org….

    数据库 2023年6月16日
    077
  • 盘点 | 主流云原生数据库技术方案

    作者:柯煜昌 顾问软件工程师目前从事 RadonDB 容器化研发,华中科技大学研究生毕业,有多年的数据库内核开发经验。 你将 Pick 这些内容: 云原生的概念 云原生数据库的概念…

    数据库 2023年5月24日
    0116
  • 多线程基础知识!!!

    1.1、继承Thread类(重点) public class MyThread extends Thread{ @Override public void run() { } pu…

    数据库 2023年6月16日
    080
  • 盘点 | 常用 PG 数据恢复方案概览【建议收藏】

    作者:张连壮 PostgreSQL 研发负责人从事多年 PostgreSQL 数据库内核开发,对 Citus 有非常深入的研究。 PostgreSQL 本身不具备数据闪回和数据误删…

    数据库 2023年5月24日
    0125
  • 工具 | PG 集群复制管理工具 repmgr

    作者:颜博 青云科技数据库研发工程师目前从事 PostgreSQL 产品开发工作,热衷于 PostgreSQL 数据库的学习和研究 | REPMGR 简介 repmgr[1] 是一…

    数据库 2023年5月24日
    0111
  • 文件输入/输出流

    文件输入/输出流程序 运行期间,大部分数据都被存储在 内存中,当程序结束或被关闭时,存储在内存中的数据将会 消失。如果要 永久保存数据,那么最好的办法就是把数据保存到 磁盘的文件中…

    数据库 2023年6月16日
    0107
  • Our Feeling

    走过春夏秋冬走过五湖四海就是没有走过你 看过日出日落看过潮起潮落就是看不到你 本文来自博客园,作者:ukyo–BlackJesus,转载请注明原文链接:https://…

    数据库 2023年6月11日
    086
  • [spring]spring详细总结

    spring 1.spring简介 Spring框架是一个开源的应用程序框架,是针对bean的生命周期进行管理的轻量级容器。 Spring解决了开发者在J2EE开发中遇到的许多常见…

    数据库 2023年6月16日
    049
  • Python:如何只用十几行代码写一个程序?

    Python可以做的事情真的太多了,常见的网站开发,软件开发,爬虫,数据分析,人工智能,机器学习,量化投资,自动化办公,自动化运维,游戏开发,脚本制作,树莓派等等等等~ 今天咱们就…

    数据库 2023年6月14日
    075
  • SQL的多表查询

    显示内连接: select 字段列表 from 表1 [inner] join 表2 on 连接条件; (PS:方括号(“[]”)内的为可选项;) (注意:…

    数据库 2023年5月24日
    097
  • zabbix自定义监控(mysql主从状态和延迟)

    zabbix自定义监控 需要先配置mysql主从,从库上需要安装zabbix_agentdzabbix_server配置zabbix_agentd配置mysql主从配置 监控mys…

    数据库 2023年6月14日
    074
  • centos7安装docker

    一、安装前必读 在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。 注意:本文的命令使用的是 roo…

    数据库 2023年6月14日
    075
  • 3. 视图-触发器-存储过程-索引

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

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