Shell 循环语句 for/while/untli
前言:
- 1.for :知道循环次数;
- 2.while:不知道循环次数;需要跳出条件。
- 3.untli:不知道循环次数;用处不多
- 4.退出循环
一.循环语句简介
重复执行一段代码, 都可以称之为循环。 循环体中三种专业的话术:遍历、迭代、递归 。
- 遍历:按规则访问非线性结构中的每一项。
- 迭代:按顺序访问线性结构中的每一项。
- 递归:在函数内调用自生,将复杂情况逐步转化成基本情况
1.1原理
程序先进行语句判断。 如果判断为真则执行循环语句,然后再进行语句判断,直至语句判断失败才跳出。 如果判断为假,直接跳出,不继续执行。
1.2循环语句的优点
- 减少脚本的长度;
- 提高工作效率。
二.for
1. 语句格式
1.1 列表循环
for i in 循环次数
#i可以替代成任意,标准格式是i
do
command #循环动作
done #结束循环
示例:求1-100的和
方法1:
#!/bin/bash
sum=0
for i in `seq 100`
#`seq 100`反撇调用命令将100排序
do
sum=$[i + sum]
#打印sum
done
#结束位
echo "sum:$sum"
打印调用$sum的值
#其他写法
let sum=`expr $1 + $sum`
let sum= $1 + $sum
let sum+=$i
# += 累加赋值
方法2
累加求和
求奇数和
求偶数和
2.类似于c语言风格的for循环
-
exp1为初始值表达式,定义变量并赋初值;
-
exp2为判断条件表达式,决定是否循环;
-
exp3用于决定循环变量如何改变,决定循环什么时候退出。
格式 :
for ((exp1;exp2;exp3))
do
command
done
示例 :
3. 语句练习
3.1 九九乘法表
3.2批量改文件后缀
面试题 批量改后缀
#!/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
示例:
3.3 批量创建指定用户,并添加用户密码
vim user.txt #在此文件添加用户
vim user.sh #脚本
#!/bin/bash
for i in `cat ./user.txt`
do
useradd $i
echo 123132 | passwd--stdin $i
done
批量删除用户
查看某网段下所有主机的状态并导入指定文件中
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工作原理
while语句用于重复测试某个条件,只要条件成立则反复执行,当命令判断为假时停止执行。
只知道停止条件,不知道次数时,就需要使用while。
3.2 while语句结构
while 判断条件
do
command
done
3.3 死循环
由于缺少结束条件,循环会一直持续下去,这就是死循环。
while true
do
echo "这是一个死循环"
done
#除了true,还可以用 :
3.4 while语句练习
求和
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
let sum+=$i
#防止死循环 let i++
done
echo $sum
猜价格游戏
#!/bin/bash
#1-1000 不限次数 猜高会提示高 猜低会提示低 统计猜了多少次
i=`echo $[RANDOM%1000+1]`
t=0
while true
do
read -p "你猜是多少(1-1000)" price
let t++
if [ $price -eq $i ]
then
echo "你真聪明"
echo "你一共猜了${t}次"
exit
elif [ $price -gt $i ]
then
echo "友情提示,太高了"
else
echo "友情提升,低了"
fi
done
————————————————
批量添加用户
要求:
-
批量添加20个用户,用户名以stu开头,按编号排序
-
初始密码:123123
#!/bin/bash i=1 while [ "${i}" -le 20 ] do useradd stu${i} echo 123123 | passwstu${i} --stdin &>/dev/null if [ $i -eq 0 ] then echo "用户stu${i}建立失败" else echo "用户stu${i}建立成功" fi let i++ done
四.退出循环
4.1 exit
当执行
exit
语句后,脚本将立即终止,并且不会再执行后续的代码。
#!/bin/bash
while true
do
# 条件判断
if [ 条件 ]
then
exit # 退出脚本
fi
# 循环体代码
done
4.2 break
break
语句会立即终止最内层的循环,并跳出该循环体执行循环后的代码。
-
break n 代表跳出n层循环
-
n为具体数字
while true do # 条件判断 if [ 条件 ] then break # 退出循环 fi # 循环体代码 done
五. until
4.1 until语句基本原理
until语句用于重复测试某个条件,和while语句相反,只要条件不成立则反复执行,条件成立时,退出循环。
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 "
通过给指定用户发送消息,验证用户是否在线
#!/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
转载自:https://juejin.cn/post/7268281090610462761