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
相关推荐
Jiaberrr11 分钟前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
XKSYA(小巢校长)39 分钟前
NatGo我的世界联机篇
开发语言·php
Cons.W42 分钟前
Codeforces Round 975 (Div. 1) C. Tree Pruning
c语言·开发语言·剪枝
憧憬成为原神糕手1 小时前
c++_ 多态
开发语言·c++
VBA63371 小时前
VBA信息获取与处理第三个专题第三节:工作薄在空闲后自动关闭
开发语言
wjs20242 小时前
XSLT 实例:掌握 XML 转换的艺术
开发语言
萧鼎2 小时前
Python第三方库选择与使用陷阱避免
开发语言·python
安冬的码畜日常2 小时前
【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)
开发语言·前端·javascript·信息可视化·数据可视化·d3.js
一颗星星辰2 小时前
C语言 | 第十章 | 函数 作用域
c语言·开发语言
lxp1997412 小时前
php函数积累
开发语言·php