Shell循环:for

语法结构:

  1. for 变量名 [ in 取值列表 ]
  2. do
  3. 循环体
  4. done

需求:自动创建10个用户

  1. #!/bin/bash
  2. read -p "请输入你要创建的用户名:" name
  3. read -p "请输入你要创建用户的数量:" num
  4. for i in `seq $num`
  5. do
  6. useradd ${name}${i}
  7. done
  8. tail -$num /etc/passwd
  9. [root@bogon ~]# sh user.sh
  10. 请输入你要创建的用户名:ccc
  11. 请输入你要创建用户的数量:3
  12. ccc1:x:1014:1014::/home/ccc1:/bin/bash
  13. ccc2:x:1015:1015::/home/ccc2:/bin/bash
  14. ccc3:x:1016:1016::/home/ccc3:/bin/bash
  15. [root@bogon ~]#

想了解更多方式的也可以去看一下:https://blog.csdn.net/magi1201/article/details/75195983

案例1

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

思路:

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

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

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

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

  1. #!/bin/bash
  2. for i in {2..254}
  3. do
  4. ip=192.168.51.$i
  5. ping -c1 -W1 ${ip} &> /dev/null
  6. if [ $? -eq 0 ];then
  7. echo ${ip} | tee -a ip.txt
  8. fi
  9. done
  10. [root@bogon ~]# cat ip.txt
  11. 192.168.51.202
  12. 192.168.51.202
  13. 192.168.51.19
  14. 192.168.51.20
  15. 192.168.51.21
  16. 192.168.51.22
  17. 192.168.51.23

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

  1. #!/bin/bash
  2. >ip.txt ##清空文本
  3. for i in {2..254}
  4. do
  5. {
  6. ip=192.168.51.$i
  7. ping -c1 -W1 ${ip} &> /dev/null
  8. if [ $? -eq 0 ];then
  9. echo ${ip} | tee -a ip.txt
  10. fi
  11. }& ##后台运行
  12. done
  13. wait ##等待前一个程序执行完毕,在执行下一个
  14. [root@bogon ~]# cat ip.txt
  15. 192.168.51.20
  16. 192.168.51.21
  17. 192.168.51.22
  18. 192.168.51.23
  19. 192.168.51.19
  20. 192.168.51.25
  21. 192.168.51.24
  22. 192.168.51.27
  23. 192.168.51.26
  24. 192.168.51.28

案例2:通过用户列表文件创建用户

  1. 案例1: 通过用户列表文件创建用户
  2. [root@localhost scripts]# cat user.txt
  3. qianqian
  4. qianfeng
  5. fengfeng
  6. 示例:
  7. #!/bin/bash
  8. for user in `cat user.txt`
  9. do
  10. useradd $user
  11. echo "$user is created"
  12. done
  13. 升级:
  14. 用户可以使用参数的形式,自定义用户名文件。
  15. 如果用户没有输入用户名文件,提示用户输入
  16. 如果用户输入的不是文件,提示用户更正。
  17. 启动循环创建用户
  18. 如果用户已经存在,提示存在
  19. 如果用户不存在,则创建成功,提示成功
  20. [root@bogon ~]# cat user.txt
  21. zhangshan
  22. wangxu
  23. likui
  24. [root@bogon ~]#
  25. #!/bin/bash
  26. passwd=123
  27. #判断脚本是否有参数
  28. if [ $# -eq 0 ];then
  29. echo "usage:$0 filename"
  30. exit 1
  31. fi
  32. #判断用户输入的是否是文件
  33. if [ ! -f $1 ];then
  34. echo "error filename"
  35. exit 2
  36. fi
  37. #设置循环,读取文件,创建用户
  38. for user in `cat $1`
  39. do
  40. id $user &> /dev/null
  41. #如果用户不存在则创建用户,否则提示已存在
  42. if [ $? -eq 0 ];then
  43. echo "user $user already exists"
  44. else
  45. useradd $user
  46. echo "passwd" | passwd --stdin $user &> /dev/null
  47. #判断用户是否创建成功,并提示
  48. if [ $? -eq 0 ];then
  49. echo "user is created."
  50. fi
  51. fi
  52. [root@bogon ~]# sh ccc.sh user.txt
  53. user is created.
  54. user is created.
  55. user is created.
  56. [root@bogon ~]#
  57. [root@bogon ~]#
  58. [root@bogon ~]# sh ccc.sh user.txt
  59. user zhangshan already exists
  60. user wangxu already exists
  61. user likui already exists
  62. [root@bogon ~]# sh ccc.sh
  63. usage:ccc.sh filename

Shell第三章《for循环》的更多相关文章

  1. 第三章 C#循环与方法

    第一节1-For循环入门 语法: for(条件表达式) { 执行语句 } 练习: 第三章作业1.写一个程序打印100到200的值;2.写一个程序从10打印到1:3.写一个程序打印10到30之间的所有偶 ...

  2. python第三章:循环语句--小白博客

    Python条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非 ...

  3. [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】

    第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...

  4. 《Linux命令行与shell脚本编程大全》 第三章 学习笔记

    第三章:基本的bash shell命令 bash程序使用命令行参数来修改所启动shell的类型 参数 描述 -c string 从string中读取命令并处理他们 -r 启动限制性shell,限制用户 ...

  5. CentOS 7.4 初次手记:第三章 CentOS基础了解

    第三章 CentOS基础了解... 36 第一节 语言编码.终端... 36 I 查看语言编码... 36 II Tty?.pts/?. 36 第二节 bash/sh command. 38 I 查找 ...

  6. 第三章 Linux基本命令操作

    第三章  Linux基本命令操作 ¨  本节所讲内容: ¨  3.1  Linux终端介绍 Shell提示符 Bash Shell基本语法 ¨  3.2  基本命令的使用:ls.pwd.cd.hist ...

  7. 跟着高淇学Python——第一到第三章总结

    2019/10/26 第一章:Python介绍 Python是一种解释型,面向对象的语言.特点是: 可读性强 简洁,简洁 面向对象 免费开源 可移植性和跨平台性 丰富的库 可扩展性 应用范围:1.人工 ...

  8. 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 ...

  9. 读《编写可维护的JavaScript》第二三章总结

    第二章 注释 添加注释的一般原则是,在需要让代码变得清晰时添加注释. 2.1 ① 单行注释 独占一行的注释,用来解释下一行代码.这行注释之前总是有一个空行,且缩进层级和下一行代码保持一致. 在代码行的 ...

随机推荐

  1. SAP BPC 清除CUBE 中的数据

    原理:先根据模型和查询条件取出数据,然后把金额设置为0,再写回CUBE. 1.获取数据并清空金额 *&--------------------------------------------- ...

  2. RocketMQ事务消息机制

    1.half消息对消费者不可见,用于确定MQ服务正常. 2.MQ响应half消息. 3.生产者执行本地事务. 4.生产者发送具体消息+本地事务状态,MQ根据本地事务状态执行Commit或者Rollba ...

  3. python带你采集不可言说网站数据,并带你多重骚操作~

    前言 嗨喽,大佬们好鸭!这里是小熊猫~ 今天我们采集国内知名的shipin弹幕网站! 这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主. 大家可以在这里找到许多欢乐. 目录(可根据个人情况点击你 ...

  4. python写个前端,这不是轻轻松松~

    前端除了用js++css+html,还有没有其它办法?其实python也可以 1. 安装与基本流程 Python学习交流Q群:660193417### 安装 PyWebIO 和其他的第三方库一样使用p ...

  5. TypeScript ReadonlyArray(只读数组类型) 详细介绍

    1.ReadonlyArray 简介 在TypeScript中,除了Array<T>类型,还有一个ReadonlyArray<T>类型,ReadonlyArray类型和Arra ...

  6. 临近梯度下降算法(Proximal Gradient Method)的推导以及优势

    邻近梯度下降法 对于无约束凸优化问题,当目标函数可微时,可以采用梯度下降法求解:当目标函数不可微时,可以采用次梯度下降法求解:当目标函数中同时包含可微项与不可微项时,常采用邻近梯度下降法求解.上述三种 ...

  7. Note -「Dijkstra 求解 MCMF」

    食用前请先了解 SPFA + Dinic/EK 求解 MCMF. Sol. 总所周知,SPFA 牺牲了.于是我们寻求一些更稳定的算法求解 MCMF. 网络流算法的时间属于玄学,暂且判定为混乱中的稳定. ...

  8. net core 3.1使用identityServer登录时signin-oidc报Correlation failed的解决方法

    此问题全网找了很久,也困扰了我很久,始终没有找到解决方法.今天结合网上其他问题的帖子,自己研究的半天,终于找到了这个解决方法,经亲自测试可行.欢迎大牛指导指正. 有时客户收藏的系统地址是认证端的,然后 ...

  9. 计算机二级Python(第一阶段)

    介绍   本篇文章主要针对于计算机二级考试的崽崽,当然想了解Python和学习Python的崽崽也是可以看本篇文章的:毕竟,手机和电脑都可以运行Python:本篇我文章虽然是笔记,但是也纯靠手打,希望 ...

  10. python 异常捕捉与异常处理

    简介 在实际开发中,为了防止异常界面直接被用户看到,往往我们会采用捕捉异常的方式来进一步处理异常. 异常捕捉 如下代码由于下标越界会导致异常 data = range(10) print(data[1 ...