shell编程之循环语句 for (包看包会 如果不会 再看一遍)(上)

简介: 1 什么是循环凡是重复执行一段代码, 都可以称之为循环。 循环体中三种专业的话术:遍历、迭代、递归 。遍历(traversal) - 按规则访问非线性结构中的每一项。迭代(iterate) - 按顺序访问线性结构中的每一项。递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况。

1 什么是循环

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

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

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

循环次数分为两种:

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

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


2 for循环语句

用法:

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

格式:

for 变量名 in 取值列表
 do
    命令序列
 done
复制代码


执行机制:

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


网络异常,图片无法展示
|


2.1 for语句的作用演示

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

#方法一:
 [root@yuji ~]# for i in {1..10}
 > do
 > echo $i
 > done
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 #方法二:
 [root@yuji ~]# for i in $(seq 1 10)
 > do
 > echo $i
 > done
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 #方法三:
 [root@yuji ~]# for ((i=1;i<=10;i++))
 > do
 > echo $i
 > done
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|




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

[root@yuji ~]# for i in {1..10..2};do echo $i;done   //分号可以在一行中执行多条命令
 1
 3
 5
 7
 9
 [root@yuji ~]# for i in $(seq 1 2 10);do echo $i;done
 1
 3
 5
 7
 9
 [root@yuji ~]# for ((i=1;i<=10;i+=2));do echo $i;done
 1
 3
 5
 7
 9
复制代码


网络异常,图片无法展示
|


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

[root@yuji ~]# for i in {2..10..2}; do echo $i; done
 2
 4
 6
 8
 10
 [root@yuji ~]# for i in $(seq 2 2 10);do echo $i;done
 2
 4
 6
 8
 10
 [root@yuji ~]# for ((i=2;i<=10;i+=2));do echo $i;done
 2
 4
 6
 8
 10
复制代码


网络异常,图片无法展示
|


2.2 for循环应用示例

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

创建脚本:

[root@yuji ~]# vim for1.sh      //创建脚本
 #!/bin/bash
 #求从1加到10的和。
 sum=0
 for i in {1..10}
 do
     sum=$[sum+i]
 done
 echo "求和的结果是$sum"
 [root@yuji ~]# bash for1.sh     //执行脚本
 求和的结果是55
复制代码


网络异常,图片无法展示
|




网络异常,图片无法展示
|


示例2:批量添加用户

要求:

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

创建脚本:

[root@yuji ~]# vim users.txt
 [root@yuji ~]# cat users.txt
 liyi
 lisan
 liwu
 liliu
 [root@yuji ~]# vim for2.sh             //创建脚本
 #!/bin/bash
 #批量添加用户,用户名存在放users.txt文件中
 #初始密码123456
 for user in $(cat /root/users.txt)
 do
    useradd $user
    echo "123456" | passwd --stdin $user
 done
 [root@yuji ~]# bash for2.sh             //执行脚本
 更改用户 liyi 的密码 。
 passwd:所有的身份验证令牌已经成功更新。
 更改用户 lisan 的密码 。
 passwd:所有的身份验证令牌已经成功更新。
 更改用户 liwu 的密码 。
 passwd:所有的身份验证令牌已经成功更新。
 更改用户 liliu 的密码 。
 passwd:所有的身份验证令牌已经成功更新。
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|




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

要求:

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

创建脚本:

[root@yuji /data]# vim ips.txt
 [root@yuji /data]# cat ips.txt
 192.168.72.10
 192.168.72.22
 192.168.72.129
 192.168.72.200
 [root@yuji ~]# vim for3.sh       //写脚本
 #!/bin/bash
 #IP地址存放在ips.txt文件中,每行一个
 #使用ping命令检测各主机的连通性
 for host in $(cat /data/ips.txt)
 do
    ping -c 3 -i 0.5 -w 4 $host &> /dev/null
    if [ $? -eq 0 ]
    then
        echo "$host is up"
    else
        echo "$host is down"
    fi
 done
 [root@yuji ~]# bash for3.sh     //运行脚本
 192.168.72.10 is down
 192.168.72.22 is down
 192.168.72.129 is down
 192.168.72.200 is down
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|



相关文章
|
2月前
|
Unix Linux Shell
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
49 0
|
2月前
|
Shell C++ 开发者
【Shell 编程指南】Shell运算操作符之$[]详解
【Shell 编程指南】Shell运算操作符之$[]详解
18 0
|
3月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
61 0
|
14天前
|
监控 Shell 开发工具
Shell编程
Shell编程
|
2月前
|
存储 Java Shell
bigdata-04-shell编程基础
bigdata-04-shell编程基础
19 0
|
2月前
|
Shell Linux C++
【Shell 编程设计】 编写自己的清理后台的Shell脚本
【Shell 编程设计】 编写自己的清理后台的Shell脚本
33 1
|
2月前
|
存储 Shell 数据安全/隐私保护
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
29 0
|
2月前
|
Shell C语言 C++
【Shell 编程指南】shell中的(),{}几种语法用法
【Shell 编程指南】shell中的(),{}几种语法用法
17 0
|
2月前
|
Shell 程序员 Linux
【Shell 编程指南】shell运算操作符之(())
【Shell 编程指南】shell运算操作符之(())
19 0
|
4月前
|
Shell
Shell 编程快速入门 之 函数基础知识
Shell 编程快速入门 之 函数基础知识
69 0
Shell 编程快速入门 之 函数基础知识