likes
comments
collection
share

Shell 循环语句 for/while/untli

作者站长头像
站长
· 阅读数 22

前言:

  • 1.for :知道循环次数;
  • 2.while:不知道循环次数;需要跳出条件。
  • 3.untli:不知道循环次数;用处不多
  • 4.退出循环

一.循环语句简介

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

  1. 遍历:按规则访问非线性结构中的每一项。
  2. 迭代:按顺序访问线性结构中的每一项。
  3. 递归:在函数内调用自生,将复杂情况逐步转化成基本情况

1.1原理

Shell 循环语句 for/while/untli

程序先进行语句判断。 如果判断为真则执行循环语句,然后再进行语句判断,直至语句判断失败才跳出。 如果判断为假,直接跳出,不继续执行。

1.2循环语句的优点

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

二.for

1. 语句格式

1.1 列表循环

for  i  in  循环次数
#i可以替代成任意,标准格式是i

do

command #循环动作

done #结束循环


Shell 循环语句 for/while/untli

示例:求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

累加求和

Shell 循环语句 for/while/untli



Shell 循环语句 for/while/untli


求奇数和

Shell 循环语句 for/while/untli

Shell 循环语句 for/while/untli

求偶数和

Shell 循环语句 for/while/untli

Shell 循环语句 for/while/untli

2.类似于c语言风格的for循环

Shell 循环语句 for/while/untli

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

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

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

格式 :

for ((exp1;exp2;exp3))
do
  command 
done

示例 :

Shell 循环语句 for/while/untli

Shell 循环语句 for/while/untli

3. 语句练习

3.1 九九乘法表

Shell 循环语句 for/while/untli

Shell 循环语句 for/while/untli

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

示例:

Shell 循环语句 for/while/untli



Shell 循环语句 for/while/untli



Shell 循环语句 for/while/untli

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

Shell 循环语句 for/while/untli

Shell 循环语句 for/while/untli


批量删除用户

Shell 循环语句 for/while/untli

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

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 循环语句 for/while/untli

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

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

3.2 while语句结构

while 判断条件 
do
    command
done

3.3 死循环

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

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

Shell 循环语句 for/while/untli


Shell 循环语句 for/while/untli

3.4 while语句练习

求和

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

Shell 循环语句 for/while/untli


Shell 循环语句 for/while/untli

猜价格游戏

#!/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      

————————————————

Shell 循环语句 for/while/untli

Shell 循环语句 for/while/untli

批量添加用户

要求:

  • 批量添加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
    

Shell 循环语句 for/while/untli


Shell 循环语句 for/while/untli

四.退出循环

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语句基本原理

Shell 循环语句 for/while/untli

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
评论
请登录