首页 > 系统相关 >shell编程之循环语句 for

shell编程之循环语句 for

时间:2022-10-30 16:46:44浏览次数:33  
标签:语句 10 shell 示例 编程 空格 循环 分隔符

1 什么是循环

凡是重复执行一段代码, 都可以称之为循环。 循环体中三种专业的话术:遍历、迭代、递归 。

  • 遍历(traversal) - 按规则访问非线性结构中的每一项。
  • 迭代(iterate) - 按顺序访问线性结构中的每一项。
  • 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况。

通常有进入循环的条件和退出循环的条件。

循环次数分为两种:

  • 循环次数事先已知
  • 循环次数事先未知

常见的循环命令:for, while, until。

2 for循环语句

用法:

  • 读取不同的变量值,用来逐个执行同一组命令。
  • 使用场景:一般用于循环次数事先已知的场景。
  • 执行机制:遍历。

格式:

 for 变量名 in 取值列表

 do  

  命令序列  done

执行机制: 1.依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。  2.如果省略 [in WORDS ... ] ,此时使用位置参数变量 in "$@"

2.1 for语句的作用演示

1、打印1到10的三种方法:

 

 

 

 

 

 2、打印1到10之间的奇数:

 

 3、打印1到10之间的偶数:

2.2 for循环应用示例

示例1:求从1加到10的和。

创建脚本:

 

 

示例2:批量添加用户

要求:

  1. 用户名存放在users.txt文件中,每行一个
  2. 初始密码均设为123456

创建脚本:

 

 

 

 

示例3:根据IP地址检查主机状态

要求:

  1. IP地址存放在ips.txt文件中,每行一个
  2. 使用ping命令检测各主机的连通性

创建脚本:

 

 

 

 

3 多线程执行脚本(并行执行)

普通for循环是串行,一个一个执行。

在do和done中间增加 { } 符号,可以多线程同时执行。

多线程案例演示:

  • ping 192.168.72.0/24网段内的所有主机。

4 for的三个默认分隔符

环境变量$IFS,是指内部字段分隔符, 默认为三个:空格、制表符 \t、换行符 \n。

使用set命令查看所有变量:

4.1 分隔符的作用演示:

示例:使用for读取文件内容,文件中有空格

演示:

文件中只有3行内容,使用for语句读取却显示为5行。

 

 

 

 

原因:

变量IFS定义的分隔符中有空格,for从文件中获取变量值时,以空格作为了分隔符,将"zhang san"分隔成了两行,"wang wu"也是如此。

解决方法:

在脚本中,先临时将变量IFS的值中的空格删除,使for语句不以空格作为分隔符,最后还原变量值。

 

 

 

 

               

标签:语句,10,shell,示例,编程,空格,循环,分隔符
From: https://www.cnblogs.com/jct166289/p/16841575.html

相关文章

  • shell编程之条件语句(条件测试、if语句、case语句)
    要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0......
  • Shell脚本2
    前言shell变量的类型:自定义变量:由用户自己定义,修改和使用环境变量:由系统维护,用于设置工作环境只读变量:只可以读取不可以更改位置变量:通过命令行给脚本传递参数预定......
  • Database代做编程辅导:ECS165A Normal Form/BCNF/3NF/4NF
    全文链接:tecdat.cn/?p=29690IntroductionNormalFrom是数据库理论里面最恶心的问题,从1NF到6NF,加上BCNF,DKNF以及UF。有运行结果作参考,做这种理论题简直是受罪,每一题都得反......
  • Database代做编程辅导:CS5200 Database Management
    全文链接:tecdat.cn/?p=29692IntroductionDatabaseManagement的大,根据现有代码片段以及架构图,实现一个完整的DatabaseSystem,不过相对的比较灵活。RequirementFor......
  • R代做编程辅导:CSC120 Predicting Future Values Of A Time Sequence
    全文链接:tecdat.cn/?p=29694IntroductionUT的R语言,比起上次的A1,这次的竟然要求画56张图,真是丧心病狂。使用Dataframes去读取数据,然后运算,然后写函数去运算,不能使用index......
  • Python代做编程辅导:ECM1414 Data Structures and Algorithms
    全文链接:tecdat.cn/?p=29696IntroductionInsertSort和MergeSort是排序算法中两个最基础的算法,虽然实际中很难用到,但是作为排序的启蒙还是不错的。此次要求写出Insert......
  • Algorithm代做编程辅导:CS406 Greed Algorithm
    全文链接:tecdat.cn/?p=29699IntroductionGreedyAlgorithm,也就是贪心算法,局部最优化的算法,虽然可以快速得到解,但是这个解往往不会是全局最优解。不过这个算法的思想倒是......
  • Linux shell编程
    建立文件:第一行#!/bin/bash标识该Shell脚本由哪个Shell解释:#!/bin/bashecho"HelloWorld!"shell中的变量:shell中的变量⑴常用系统变量$#:保存程序......
  • mySQL语句
    Mysql语句:1、插入sql  主键ID也需要填,mysql不会自动生成,--并且需要满足自增INSERTintotb_roomhclog(ID,RID,RoomID,RoomName,UCount,Raw_URL,Analyse_URL,Analys......
  • java spring项目中使用设计模式和函数式编程的思想去除业务逻辑中的if else判断
    如果你开发项目时对项目之后的发展很清晰但仍陷入了为什么要用设计模式替换ifelse的疑问时就说明你项目的体量不需要用设计模式答案只在问题提出之后有意义策略和状......