目录
1.循环含义
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
循环次数事先已知
循环次数事先未知
2.for循环
1.已知循环的次数 (来十个新人,创建10个账号)
2.未知循环的次数,但是有一个跳出条件(女朋友生气,道歉,一直到原谅)
1.列表循环
语法结构
for 变量名 in {命令列表}
do
命令
done
循环列表,只和你循环的次数有关
循环列表6个值循环六次
真正循环的东西是命令序列
列表循环的表现形式
{1..10}从一到十 {0..100..2}从0开始到100结束,每次加二,步长为2,打印的是偶数
{1..100}从一到一百 {1..100..2}从1开始到100结束,每次加二,步长为2,打印的是奇数
`seq 10`调用seq的命令执行结果 1-10
seq 0 2 10偶数
seq 1 2 10奇数
用for循环一个100以内所有整数加起来求和
vim jj
#!/bin/bash
sum=0
for i in {0..100}
do
sum=$[sum+i]
done
echo "总和是:$sum"
2.不带列表循环
for 变量名
do
命令
done
vim ssss
把a赋值给变量i,i有值了它就开始执行do..done了
检测一整个网段的主机是否存在
vim ip.sh
#!/bin/bash
ip=192.168.17.for i in {1..254}
do
{
ping -c1 -W1 ${ip}${i} &>/dev/null
if [ $? -eq 0 ]
then
echo ${ip}${i} >> /data/hoston
else
echo ${ip}$i >> /data/hostoff
fi
} &
done
3.for的第二种格式
for((表达式1;表达式2;表达式3));
do
命令格式
done
表达式一 定义变量并赋初值
表达式二 是一个判断,如果满足表达式2才执行
表达式三 决定循环变量如何改变,决定循环什么时候退出
sum+=i 等于 sum=sum+i
#需要使用 let 命令
++ 自身变量+1
-- 自身变量-1
+=5 自身变量+5
-=5 自身变量-5
*=5 自身变量*5
/=5 自身变量/5
%=5 自身变量%5
脚本写一个正方形
vim zfx
#!/bin/bash
for j in {1..9}
do
for i in {1..9}
do
echo -e " * \c"
done
echo
done
脚本写一个九九乘法表
vim cfb
#!/bin/bash
for j in {1..9}
do
for i in `seq $j`
do
echo -e "${i}*${j}=$[i*j]\t\c"
done
echo
done
批量修改后缀名
vim hz.sh
#!/bin/bash
for i in *.txt
do
pre=`echo $i|cut -d"." -f1`
mv $i ${pre}.bak
done
2.while
相对于for,需要知道循环次数
我们只知道停止条件,不知道次数,就需要使用while
直到达到条件
while循环
1、语法结构
2、死循环
while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
格式
while 循环
while 判断条件
do
命令序列
done
判断条件((i=0;i<=100;i++))
条件成立 继续循环 条件不成立 跳出循环
i++在外面需要加let
死循环
while true
脚本写一个猜价格游戏
vim cai.sh
#!/bin/bash
m=`echo $[RANDOM%1000+1]`
t=0while true
do
read -p "请输入猜的价格(1-1000内的整数):" h
let t++
if [ $h -eq $m ]
then
echo "恭喜你猜对了 商品价格是 $h 您一共猜了 $t 次"
exit
elif [ $h -gt $m ]
then
echo "您的价格猜高了"
else
echo "您的价格猜低了"
fi
done
批量添加用户
v im yh.sh
#!/bin/bash
for i in `cat /data/name.txt`
do
id $i &>/dev/null
if
[ $? -eq 0 ]
then
echo"$i 已存在"
continue
fi
useradd $i
echo 123 | passwd $i --stdin
done
3.until
until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环
格式
until 条件测试操作
do
命令序列
done
写一个发送消息脚本
vim fxx.sh
#!/bin/bash
username=$1
if [ $# -lt 1 ]
then
echo "请在脚本后输入 用户名和发送信息"
exit 1
fiif grep "^$username" /etc/passwd &>/dev/null
then :
else
echo "用户不存在"
exit 1
fi
until who |grep $username &>/dev/null
do
echo "用户不在线"
sleep 5
donemes=$2
echo $mes |write $username
写一个求和的脚本
vim qh.sh
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[sum+i]
let i++
done
echo sum=$sum