目录
循环语句
循环: 一定要有跳出循环的条件
1.已知循环的次数(来10个新人 新建10 账号),但是有一个跳出条件
2.未知循环的次数( 女朋友生气,道歉 道到原谅)
for(已知次数)
for 变量名 in 取值列表
do
命令序列
done
格式一:for 名称[in 词语...];do 命令;done
格式二:for((表达式1;表达式2;表达式3));do命令;done
循环列表 只和你循环的额次数有关
循环列表 有 6个值 循环6次
循环列表的 表现形式
{1..10}
{1..100}
{0..100..2} 从0开始到100结束,每次加2 步长为2 打印的都是偶数
{0..100..1} 从0开始到100结束,每次加2 步长为2 打印的都是奇数
‘seq 10’ 调用 seq的命令执行结果 1到10
seq 0 2 10 偶数
seq 1 2 10 奇数

实验示例
九九乘法表
vim 99.sh
#!/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
:wq
从一加到一百的和
[root@localhost ~]# vim f.sh
#!/bin/bash
i=0
sum=0
for i in {1..100}
do
sum=$[i+sum]
done
echo sum=$sum
:wq!
[root@localhost ~]# bash f.sh
sum=5050
双重循环及跳出循环
break跳出单个循环 break n 数字数字是几代表跳出n层循环
continue终止某次循环中的命令,但是不会完全终止命令
exit 直接退出脚本
continue和break的区别:
continue:
[rootalocalhost -]# vim w.sh
#!/bin/bash
for i in {1..10}
do
if [ $i -eq 5 ]
then
continue
fi
echo i=$i
done
:wq!
break:
[rootalocalhost -]# vim w.sh
#!/bin/bash
for i in {1..10}
do
if [ $i -eq 5 ]
then
break
fi
echo i=$i
done
:wq!
面试题
将 某文件夹下的所有txt 文件后缀改为bak
for i in *.bak
do
pre='echo $i |cut -d"." -f1
mv $i ${pre}.txt
done
进阶版
#!/bin/bash
for i in `cat /test/name.txt`
do
touch $i
done
#!/bin/bash
for i in *.JPG
do
p=`echo $i | cut d"_" -f1`
n=`echo Si | cut d"_" -f2`
mv $1 ${n}_${p}.jpg
done
限制条件
while(成功执行)
while 条件测试操作
do
命令序列
done
实验案例
猜商品价格
[root@localhost data]# vim cai.sh
#!/bin/bash
m=`echo $[RANDOM%1000+1]`
t=0
while 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
:wq!
检测httpd运行
[root@localhost ~]#vim httpd.sh
#!/bin/bash
while ss -natp | grep httpd &>/dev/null
do
echo "httpd 正常运行"
sleep 3
done
echo "httpd 运行不正常"
:wq!
[rootalocalhost ~]# bash httpd.sh
httpd 运行正常
[rootalocalhost ~]systemctl stop httpd
[rootalocalhost ~]
[rootalocalhost ~]
[rootalocalhost ~]# bash httpd.sh
httpd 运行不正常
while死循环
while[ 1 -eq 1 ]
写一个永远为真的表达式,1等于1这条件永远为真,所以这个脚本会一直循环下去
until(条件不成功执行)
until 条件测试操作
do
命令序列
done
用until计算从1加到100的和
[rootalocalhost data]# vim until.sh
#!/bin/bash
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo sum=$sum
:wq!
[rootalocalhost data]# bash until.sh
sum=5050


被折叠的 条评论
为什么被折叠?



