Shell编程之循环语句(你被强化了,看一遍就会)

for while until

  • 一、循环语句简述
    • 1.1 原理
    • 1.2 循环语句的好处
  • 二、for循环语句
    • 2.1 语句格式
      • 2.1.1 列表循环
      • 2.1.2 不带列表循环
      • 2.1.3 类c循环
    • 2.2 for语句练习
      • 2.2.1 求出1-100中所有奇数的和
      • 2.2.2 九九乘法表
      • 2.2.3 批量改文件后缀
      • 2.2.4 批量创建指定用户,并添加用户密码
      • 2.2.5 查看某网段下所有主机的状态并导入指定文件中
  • 三、while循环语句
    • 3.1 while语句基本原理
    • 3.2 while语句结构
    • 3.3 死循环
    • 3.4 while语句练习
      • 3.4.1 求和
      • 3.4.2 猜价格游戏
    • 3.4.3 批量添加用户
  • 四、until 语句
    • 4.1 until语句基本原理
    • 4.2 until语句结构
    • 4.3 unit语句练习
      • 4.3.1 求和
      • 4.3.2 通过给指定用户发送消息,验证用户是否在线
  • 五、退出循环
    • 5.1 exit
    • 5.2 break
    • 5.3 continue

一、循环语句简述

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

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

通常有进入循环的条件和退出循环的条件。
循环次数分为两种:

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

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

1.1 原理

Shell编程之循环语句(你被强化了,看一遍就会)_第1张图片
程序先进行语句判断
如果判断为真则执行循环语句,然后再进行语句判断,直至语句判断失败才跳出。
如果判断为假,直接跳出,不继续执行。

1.2 循环语句的好处

  • 减少脚本的长度;
  • 提高工作效率。

二、for循环语句

for需要知道循环次数

2.1 语句格式

2.1.1 列表循环

#结构#
for  i  in  循环次数
#i可以替换成任意,标准格式是i
do
command #循环动作
done
#结束循环

示例:求1-100的和

#!/bin/bash
sum=0
for i in `seq 100`
do
sum=$[i + sum]
done
echo "sum:$sum"

#其他写法
let sum=`expr $1 + $sum`
let sum= $1 + $sum
let sum+=$i

# += 累加赋值

在这里插入图片描述

{ }和seq的用法
{1..100..2} #1-100中的所有奇数
{2..100..2} #1-100中的所有偶数


seq 100      #1-100
seq 1 2 100  #1-100中的所有奇数
seq 0 2 100  #1-100中的所有偶数

2.1.2 不带列表循环

#基本格式#
for 变量名 
#不指定变量范围
do
command
done
#举个例子#

#!/bin/bash
for i 
do
echo "hello"
done

Shell编程之循环语句(你被强化了,看一遍就会)_第2张图片

2.1.3 类c循环

Shell编程之循环语句(你被强化了,看一遍就会)_第3张图片

exp1为初始值表达式,定义变量并赋初值;

exp2为判断条件表达式,决定是否循环;

exp3用于决定循环变量如何改变,决定循环什么时候退出。

#格式#
for ((exp1;exp2;exp3))
do
    command
done
#举个例子#
#求和
  1 for((i=0;i<=10;i++))
  2 do                                                                                       
  3 sum=$[i+sum]
  4 done
  5 echo $sum
~              

在这里插入图片描述

2.2 for语句练习

2.2.1 求出1-100中所有奇数的和

#累加
for i in `seq 1 100`

do

let sum+=$i

done

echo "sum:$sum"

2.2.2 九九乘法表

#九九乘法表
#!/bin/bash
for j in {1..9}
do
for i in `seq $j`
do
echo -e "${i}*${j}=`echo $[i*j]`\t\c"                                                
done
echo
done     

Shell编程之循环语句(你被强化了,看一遍就会)_第4张图片

2.2.3 批量改文件后缀

#面试题#
#批量改后缀#

#!/bin/bash
cd 目标目录

for i in *
do
alhpa= `echo $i | awk -F '[0-9]+' '{print $1}'`
alnum= `echo $i |grep -oE '[0-9]+' `
mv $i ${almun}${alpha}.aa
done

2.2.4 批量创建指定用户,并添加用户密码

#!/bin/bash
vim user.txt #在此文件添加用户

vim user.sh #脚本
#!/bin/bash
for i in `cat ./user.txt`
do
echo 123132 | passwd $i --stdin
done
#批量删除用户
#!/bin/bash
for i in `cat /user.txt`
do
userdel -r $i
done

2.2.5 查看某网段下所有主机的状态并导入指定文件中

for i in {1..254}
do
{
ping -c2 -W1 192.168.91.$i &>/dev/null
if [ $? -eq 0 ] 
then
echo "host $i is online" >> online.txt
else
echo "host $i is offline" >> offline.txt
fi
} &
done

# & 放入后台执行

三、while循环语句

3.1 while语句基本原理

Shell编程之循环语句(你被强化了,看一遍就会)_第5张图片

while语句用于重复测试某个条件,只要条件成立则反复执行,当命令判断为假时停止执行。

只知道停止条件,不知道次数时,就需要使用while

3.2 while语句结构

while  判断条件
do
    command
done 

3.3 死循环

由于缺少结束条件,循环会一直持续下去,这就是死循环。

while true
do
  echo "这是一个死循环"
done
#除了true,还可以用 : 

Shell编程之循环语句(你被强化了,看一遍就会)_第6张图片

3.4 while语句练习

3.4.1 求和

#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
let sum+=$i
#防止死循环
let i++ 
done
echo $sum

在这里插入图片描述

3.4.2 猜价格游戏

#!/bin/bash
#1-1000 不限次数 猜高会提示高 猜低会提示低  统计猜了多少次

p=`echo $[RANDOM%1000+1]`
t=0

while true
do
read -p "你猜是多少(1-1000)" price
let t++
if [ $price -eq $p ]
then
echo "你真聪明"
echo "你一共猜了${t}次"
exit
elif [ $price -gt $p ]
then                                                                                     
echo "友情提示,太高了"
else
echo "友情提升,低了"
fi
done      

Shell编程之循环语句(你被强化了,看一遍就会)_第7张图片

3.4.3 批量添加用户

#需要满足 
#批量添加20个用户,用户名以stu开头,按编号排序
#初始密码为123123

#!/bin/bash
i=1
while [ "${i}" -le 20 ]
do
useradd stu${i}
echo 123123 | passwd stu${i} --stdin  &>/dev/null
let i++
done 
 

Shell编程之循环语句(你被强化了,看一遍就会)_第8张图片

四、until 语句

4.1 until语句基本原理

Shell编程之循环语句(你被强化了,看一遍就会)_第9张图片

until语句用于重复测试某个条件,和while语句相反,只要条件不成立则反复执行,条件成立时,退出循环。

4.2 until语句结构

 until 条件测试
 do
    command
 done

4.3 unit语句练习

4.3.1 求和

#!/bin/bash
i=0
sum=0
until [ ${i} -ge 100 ]
do
let sum+=${i}
let i++
done
echo " $sum "

Shell编程之循环语句(你被强化了,看一遍就会)_第10张图片

4.3.2 通过给指定用户发送消息,验证用户是否在线

#!/bin/bash
#用位置变量表示输入的用户名,第一位
username=$1
if [ $# -lt 1 ]
then
echo " 输入目标用户名和要发的消息:" 
exit 1
fi

if grep "^$username" /etc/passwd &>/dev/null
then :
else
 echo "查无此人"
 exit 1
 fi
until who|grep $username &>/dev/null
do
echo "用户暂时不在线"
#等待5秒,再次发送信息
sleep 5
done
#用位置变量表示要发送的信息
mes=$2
echo $mes | write $username

Shell编程之循环语句(你被强化了,看一遍就会)_第11张图片
Shell编程之循环语句(你被强化了,看一遍就会)_第12张图片

五、退出循环

5.1 exit

当执行 exit 语句后,脚本将立即终止,并且不会再执行后续的代码。

#!/bin/bash

while true
do
  # 条件判断
  if [ 条件 ]
  then
    exit  # 退出脚本
  fi
  
  # 循环体代码
done

5.2 break

break语句会立即终止最内层的循环,并跳出该循环体执行循环后的代码。

break n 代表跳出n层循环
#n为具体数字
while true
do
  # 条件判断
  if [ 条件 ]
  then
    break  # 退出循环
  fi
  # 循环体代码
done

5.3 continue

continue语句会跳出当前循环,但是不会终止命令。

while true
do
  # 条件判断
  if [ 条件 ]
  then
    continue  # 跳过本次循环迭代,继续下一次迭代
  fi
  # 循环体代码
done

你可能感兴趣的:(Shell编程,运维,linux,笔记)