【liinux系统(shell脚本):第三章 shell循环语句】

shell脚本 常用的循环语句

  1. for 循环:用于遍历一个已知的列表或范围内的值,比如数组、文件列表或数字范围。它会按照顺序迭代列表中的每个值,并执行相应的操作。这种循环适合于已知迭代次数的情况。

  2. while 循环:在给定条件为真时,循环执行一系列语句。它会根据条件的真假来控制循环是否继续执行。这种循环适合于不确定迭代次数的情况,因为条件可以在循环内部改变。

  3. until 循环:与 while 循环类似,但在给定条件为假时循环执行。也就是说,当条件为假时,until 循环会继续执行,直到条件为真为止。这种循环适用于需要等待条件变为真的情况。

for 循环语句

for 循环语句的格式

for 变量 in 列表
do
    # 在这里执行循环体的代码
done
  • for: 表示这是一个循环语句。
  • 变量: 这是用来迭代列表中每个元素的临时变量名。
  • 列表: 表示被迭代的元素列表,可以是文件列表、命令输出、固定的值列表等。
  • 循环体的代码: 在 do 和 done 之间编写需要重复执行的代码。

for循环示例

1~2023的累和

#!/bin/bash

sum=0
for ((i=1; i<=2023; i++))
do
    sum=$((sum + i))
done

echo "Sum using for loop: $sum"

制作九九乘法表

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

批量改文件后缀

#面试题#

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

批量添加用户密码

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

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

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

总结

#遍历数组
#!/bin/bash

fruits=("apple" "banana" "cherry")
for fruit in "${fruits[@]}"
do
    echo "Fruit: $fruit"
done

#遍历目录中的文件
#!/bin/bash

for file in /path/to/directory/*
do
    echo "File: $file"
done

#使用数字范围进行循环
#!/bin/bash

for i in {1..10}
do
    echo "Number: $i"
done

#遍历命令输出
#!/bin/bash

for user in $(cat /etc/passwd | cut -d':' -f1)
do
    echo "User: $user"
done

#嵌套循环
#!/bin/bash

for i in {1..3}
do
    for j in {1..3}
    do
        echo "Outer loop: $i, Inner loop: $j"
    done
done

#遍历命令行参数
#!/bin/bash

for arg in "$@"
do
    echo "Argument: $arg"
done

#使用 seq 命令生成数字序列进行循环
#!/bin/bash

for num in $(seq 1 5)
do
    echo "Number: $num"
done

#遍历文件内容行
#!/bin/bash

filename="sample.txt"
for line in $(cat "$filename")
do
    echo "Line: $line"
done

while循环语句

while循环语句的格式

while 条件
do
    # 在这里执行循环体的代码
done

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

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

while循环示例

1~2023的累和

#!/bin/bash

sum=0
i=1
while [ $i -le 2023 ]
do
    sum=$((sum + i))
    i=$((i + 1))
done

echo "Sum using while loop: $sum"

竞猜价格游戏

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

总结

#读取文件内容行
#!/bin/bash

filename="sample.txt"
while read line
do
    echo "Line: $line"
done < "$filename"

#等待直到某个条件满足
#!/bin/bash

while true
do
    echo "Waiting for condition to be met..."
    # 在这里可以检查条件,如果条件满足,则 break 退出循环
    sleep 1
done

#遍历命令输出直到满足条件
#!/bin/bash

while IFS= read -r line
do
    echo "Line: $line"
    # 在这里可以检查条件,如果条件满足,则 break 退出循环
done < <(command_here)

#处理命令行参数
#!/bin/bash

while [ $# -gt 0 ]
do
    echo "Argument: $1"
    shift
done

#循环直到用户输入满足条件
#!/bin/bash

while true
do
    read -p "Enter a number (0 to exit): " num
    if [ $num -eq 0 ]; then
        break
    fi
    echo "You entered: $num"
done

#使用条件判断循环
#!/bin/bash

count=1
while [ $count -le 10 ]
do
    if [ $((count % 2)) -eq 0 ]; then
        echo "Even number: $count"
    fi
    count=$((count + 1))
done

#使用命令输出作为循环条件
#!/bin/bash

while ping -c 1 google.com > /dev/null
do
    echo "Internet connection is active."
    sleep 10
done

until 循环语句

until 条件
do
    # 在这里执行循环体的代码
done

1~2023的累和

#!/bin/bash

sum=0
i=1
until [ $i -gt 2023 ]
do
    sum=$((sum + i))
    i=$((i + 1))
done

echo "Sum using until loop: $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

退出循环

exit

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

#!/bin/bash

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

break

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

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

continue

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

while true
do
  # 条件判断
  if [ 条件 ]
  then
    continue  # 跳过本次循环迭代,继续下一次迭代
  fi
  # 循环体代码
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值