shell脚本之循环语句

循环语句

循环含义

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

for循环语句

一般知道循环次数使用for循环

bash 复制代码
第一类
格式1:
for名称 in 取值次数;do;done;
格式2:
for 名称 
in {取值列表}
do
done

# 打印20次
for i in {1..20}
do
echo $i
done
bash 复制代码
在这里插入代码片#100个数累加
sum=0
for i in {1..100}
do
let sum+=i
done
echo $sum
#奇数和
sum=0
for i in `seq 1 2 100`
do
sum=$[sum+1]
done
echo $sum
#偶数和
将奇数和`seq 1 2 100` 改为 `seq 0 2 100`


bash 复制代码
第二种
格式1
for (( 表达式1; 表达式2; 表达式3 )); do 命令; done
格式2
for ((expr1;expr2;expr3))
do
command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出
bash 复制代码
#1到10个数的累加
for ((i=0;i<=10;i++))
do
sum=$[i+sum]
done
echo $sum
bash 复制代码
#检测网络连通性
for i in {1..254}
do
{
ping -c2 -W1 192.168.65.${i} &>/dev/null  #-c2 ping两次,W1超时一秒返回
if [ $? -eq 0 ]
then
echo "host $i is online" >> /data/online.txt
else
echo "host $i is offline">> /data/offline.txt
fi
} &  # &后台执行
done
bash 复制代码
99乘法表
#打印一行*
#!/bin/bash
for i  in {1..9}
do
echo -e " * "
done

打印正方形
#!/bin/bash
for j in {1..9}
do
for i  in {1..9}
do
echo -e " * \c"		#\c换行
done
echo	#换行
done

直角三角形
#!/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
for j in {1..9}
do
for i in `seq $j`
    do
    echo -e "${i}*${j}=`echo $[i*j]`\t\c" #\t表示对齐
    done
    echo
done
bash 复制代码
批量添加用户
#!/bin/bash
ulist=$(cat /opt/user.txt)
for uname in $ulist
do
   useradd $uname
   echo "123123" |passwd --stdin  $uname #免交互设置密码
   &>/dev/null
done

while循环语句

不知道循环次数,知道停止条件时一般使用while

bash 复制代码
格式      
while 判断条件
do
done

# 累加
#!/bin/bash
sum=0
i=0
while [ $i -le 100 ]
do
sum=$[i+sum]
let i++
done
echo $sum
bash 复制代码
#!/binbash
p=`echo $[PANDOM%1000+1]` #随机生成数
time=0
while true
do
read -p "商品价格" h
let time++
if [ $h -eq $p ]
then
echo "恭喜猜对了,一共猜了${time}"
exit
elif [ $h -gt $p ]
then
echo "您猜的价格高了" 
else
echo "您猜的价格低了"
fi
done

untli循环语句

bash 复制代码
until 方式的1到100 的累加
#!/bin/bash
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum
[root@localhost data]#bash until.sh
5050
bash 复制代码
#为指定用户发送在线消息
#若用户不在线(未登录系统),则每1分钟试一次,直至用户登录系统后在发送信息
#用户名与消息通过位置参数传递给脚本
[root@localhost data]#vim test3.sh
#!/bin/bash
username=$1
if [ $# -lt 1 ]
then
echo"请在脚本后输入 用户名和发送信息"
exit 1
fi

if grep "^$username" /etc/passwd &>/dev/nu11
then :
else
echo "用户不存在"
exit 1
fi

until who |grep $username &>/dev/nu11
do
echo "用户不在线"
sleep 5
done

mes=$2
echo $mes |write $username
[root@localhost data]#bash test3.sh

rep "^$username" /etc/passwd &>/dev/nu11
then :
else
echo "用户不存在"
exit 1
fi

until who |grep $username &>/dev/nu11
do
echo "用户不在线"
sleep 5
done

mes=$2
echo $mes |write $username
[root@localhost data]#bash test3.sh

双循环和跳出循环

  • break跳出单个循环后面加数字2则代表跳出两层循环
  • continue终止某次循环中的命令,但是不会完全终止命令
bash 复制代码
#本层循环
#!/bin/bash
for i in {1..10}
do
if [ $i -eq 5 ]
then continue 
fi
echo i=$i
done

#本层循环
#!/bin/bash
for i in {1..10}
do
if [ $i -eq 5 ]
then break
fi
echo i=$i
done
相关推荐
i建模2 小时前
Electron、Tauri及其它跨平台方案终极对比
前端·javascript·electron·跨平台开发
betterangela2 小时前
react工程化开发
前端·javascript·vue.js·react.js·前端框架
Hetertopia2 小时前
在Vscode开发QT,完成QT环境的配置
开发语言·qt
傻啦嘿哟3 小时前
动态HTTP代理与静态HTTP代理的区别及HTTP代理的常见用途与类型
开发语言·php
伟笑3 小时前
elementUI 表格隔行换色,修改table表头背景样式
前端·javascript·elementui
小志开发3 小时前
Java 多态:代码中的通用设计模式
java·开发语言
m0_748234523 小时前
SpringMVC 请求参数接收
前端·javascript·算法
索然无味io3 小时前
Python--内置模块和开发规范(上)
开发语言·windows·笔记·python·web安全·网络安全
大麦大麦3 小时前
2025前端最新面试题-安全篇
开发语言·前端·javascript·安全·面试·ecmascript
wyz09233 小时前
python多线程之ThreadLocal 笔记
开发语言·python