Shell第三章《for循环》
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 ~]#
想了解更多方式的也可以去看一下:https://blog.csdn.net/magi1201/article/details/75195983
案例1
通过循环工具,探测全网主机。将在线主机记录在文本中。
思路:
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
案例2:通过用户列表文件创建用户
案例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
[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
Shell第三章《for循环》的更多相关文章
- 第三章 C#循环与方法
第一节1-For循环入门 语法: for(条件表达式) { 执行语句 } 练习: 第三章作业1.写一个程序打印100到200的值;2.写一个程序从10打印到1:3.写一个程序打印10到30之间的所有偶 ...
- python第三章:循环语句--小白博客
Python条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非 ...
- [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】
第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...
- 《Linux命令行与shell脚本编程大全》 第三章 学习笔记
第三章:基本的bash shell命令 bash程序使用命令行参数来修改所启动shell的类型 参数 描述 -c string 从string中读取命令并处理他们 -r 启动限制性shell,限制用户 ...
- CentOS 7.4 初次手记:第三章 CentOS基础了解
第三章 CentOS基础了解... 36 第一节 语言编码.终端... 36 I 查看语言编码... 36 II Tty?.pts/?. 36 第二节 bash/sh command. 38 I 查找 ...
- 第三章 Linux基本命令操作
第三章 Linux基本命令操作 ¨ 本节所讲内容: ¨ 3.1 Linux终端介绍 Shell提示符 Bash Shell基本语法 ¨ 3.2 基本命令的使用:ls.pwd.cd.hist ...
- 跟着高淇学Python——第一到第三章总结
2019/10/26 第一章:Python介绍 Python是一种解释型,面向对象的语言.特点是: 可读性强 简洁,简洁 面向对象 免费开源 可移植性和跨平台性 丰富的库 可扩展性 应用范围:1.人工 ...
- C Primer Plus_第6章_循环_编程练习
1.题略 #include int main(void) { int i; char ch[26]; for (i = 97; i <= (97+25); i++) { ch[i-97] = i ...
- 读《编写可维护的JavaScript》第二三章总结
第二章 注释 添加注释的一般原则是,在需要让代码变得清晰时添加注释. 2.1 ① 单行注释 独占一行的注释,用来解释下一行代码.这行注释之前总是有一个空行,且缩进层级和下一行代码保持一致. 在代码行的 ...
随机推荐
- 基于数传电台的组态王控制实现远程采集控制器PLC
「物联网应用案例」基于数传电台的组态王控制 一.案例介绍 采用亚控科技组态王结合亿佰特E90系列数传电台实现远程采集控制PLC.在这里主要介绍通信环境的搭建,故不采用过于复杂的控制程序,但为了体现控制 ...
- 我的第一个springboot starter
在springboot中有很多starter,很多是官方开发的,也有是个人或开源组织开发的.这些starter是用来做什么的呐? 一.认识starter 所谓的starter,在springb ...
- LVGL库入门教程04-样式
LVGL样式 LVGL样式概述 创建样式 在 LVGL 中,样式都是以对象的方式存在,一个对象可以描述一种样式.每个控件都可以独立添加样式,创建的样式之间互不影响. 可以使用 lv_style_t 类 ...
- python 基础知识-day6(内置函数)
1.sorted():用于字典的排序 dict1={"name":"cch","age":"3","sex&q ...
- python超级有用的实战项目,拿走不谢~
写在前面的一点P话: Python是目前最好的编程语言之一.由于其可读性和对初学者的友好性,已被广泛使用. 那么要想学会并掌握Python,可以实战的练习项目是必不可少的. 直接上第一个项目~ 猜字游 ...
- Python自动化办公:将文本文档内容批量分类导入Excel表格
序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 它来了,它又来了. 本文实现用Python将文本文件自动保存到Excel表格里面去. 需求 将锦江区.t ...
- 单片机 MCU 固件打包脚本软件
1 前言 开发完 MCU 软件后,通常都会生成 hex 文件或者 bin 文件,用来做固件烧录或者升级,如果用来做产品开发,就涉及到固件版本的问题,初学者通常采用固件文件重命名来区分版本. 如果需 ...
- Codeforces Round #779 (Div. 2)
A 题目连接 题目大意 给一个01串,其中每一个长度大于等于2的子区间中0的数量不大于1的数量,最少插入多少1 思路 寻找 00 和 010 00 -->0110 加2 010 --&g ...
- 最小生成树 链式前向星 Prim&Kruskal
Prim: Prim的思想是将任意节点作为根,再找出与之相邻的所有边(用一遍循环即可),再将新节点更新并以此节点作为根继续搜,维护一个数组:dis,作用为已用点到未用点的最短距离. 证明:Prim算法 ...
- SpringBoot接口 - 如何优雅的对参数进行校验?
在以SpringBoot开发Restful接口时, 对于接口的查询参数后台也是要进行校验的,同时还需要给出校验的返回信息放到上文我们统一封装的结构中.那么如何优雅的进行参数的统一校验呢? @pdai ...