文章目录
- 一、for循环语句-单循环
- 1、格式一
- 2、 格式二
- 3、格式三
- 4、取值列表常见的格式
- 5、实例
- 二、for循环语句-双循环
- 1、实例
- 三、while语句
- 1、格式
- 2、实例
- 3、break、continue、exit的区别
- 四、until语句
- 1、格式
- 2、实例
一、for循环语句-单循环
命令序列是不变的,通过取不同变量名,用来执行同一组命令,中间可以加入if语句
1、格式一
格式一
for 变量名 in 取值列表
do
命令序列
done
2、 格式二
for 变量名
do
done
当for语句内没有取值列表时,可以在执行命令时加上取值列表内容
实例1:
实例2:
3、格式三
for ((i=1;i>3;i++)) #i每循环一次+1,一直到小于3
do
done
实例1
实例2
4、取值列表常见的格式
这里拿实际的例子来说明
创建脚本文件4.sh
- 使用大括号 { }
- 直接写参数,空格隔开参数
实例 - 使用seq命令,
seq
打印5个hello
seq命令给变量值
5、实例
- 打印出100内的偶数
双中括号是做运算的 - 双括号是取括号内的值,不加双括号只会取值&i%2
- 验证
- 打印出100内的偶数的和
三种方式
- 第一种
- 第二种
- 第三种
- 1-100求和
- 多个用户判断,如果系统存在用户,输出已存在,若不存在,就创建
vim u.sh
#!/bin/bash
for i in `cat user.txt`
do
id $i &> /dev/null
if [ $? -eq 0 ];then
echo "用户已存在"
else
useradd $i
echo "123" | passwd --stdin $i &> /dev/null
echo "已创建用户$i,并设置密码"
fi
done
验证
- 创建ip段,验证是否可以ping通
创建ip段,验证是否可以ping通
#!/bin/bash
a=192.168.35
for ip in {2..50}
do
ping -c 3 $a.$ip &> /dev/null
if [ $? -eq 0 ];then
echo "$a.$ip is up"
else
echo "$a.$ip is down"
fi
done
验证
二、for循环语句-双循环
1、实例
- “” 打出矩阵、三角形、菱形、五角星
打出55的星星矩阵
升级!,可以自定义矩阵规格
升级!!,自定义三角形*
升级!!!,输出等腰三角形
#!/bin/bash
for ((i=1;i<=5;i++))
do
for((j=5;j>=$i;j--))
do
echo -n " "
done
for((z=1;z<=$i;z++))
do
echo -n "* "
done
echo
done
升级!!!!,输出菱形
read -p "请输入星星的规格: " p
for ((i=1;i<=$p;i++))
do
for((j=5;j>=$i;j--))
do
echo -n " "
done
for((z=1;z<=$i;z++))
do
echo -n "* "
done
echo
done
for((i=1;i<=$p;i++))
do
for((j=1;j<=$i;j++))
do
echo -n " "
done
for((z=5;z>=$i;z--))
do
echo -n "* "
done
echo
done
验证
终极大佬!!!!!!五角星
#!/bin/bash
#先做五角星上面的角
for ((i=1;i<=6;i++))
do
for ((j=18;j>i;j--))
do
echo -e " \c"
done
for ((k=1;k<=i;k++))
do
sleep 0.2s
echo -e -n "\e[5;32m* \e[0m"
done
echo ''
done
#做6层长度
for ((i=1;i<=6;i++))
do
for ((k=1;k<=i;k++))
do
echo -n " "
done
for ((j=18;j>i;j--))
do
sleep 0.2s
echo -e -n "\e[5;33m* \e[0m"
done
echo ''
done
#做最后的
for ((i=1;i<=6;i++))
do
for ((k=6;k>i;k--))
do
echo -e " \c"
done
for ((j=7;j>i;j--))
do
sleep 0.2s
echo -e -n "\e[5;34m* \e[0m"
done
for ((j=3;j<i*5;j++))
do
echo -e " \c"
done
#第二个角
for ((j=1;j<i;j++))
do
echo -e " \c"
done
for ((k=6;k>=i;k--))
do
sleep 0.2s
echo -e -n "\e[5;35m* \e[0m"
done
echo ''
done
验证
- 用for语句打出99乘法表
#!/bin/bash
num=0
for ((i=1;i<=9;i++))
do
for((j=1;j<=$i;j++))
do
num=$(($i*$j))
echo -n -e "$j*$i=$num\t"
done
echo
done
验证
- 打印出三个数1,2,3的所有三位数的组合
#!/bin/bash
for ((i=1;i<=3;i++))
do
for ((j=1;j<=$i;j++))
do
for ((z=1;z<=$j;z++))
do
echo -n "$i$j$z "
done
done
echo
done
验证
三、while语句
1、格式
重复测试某个条件,只要条件成立则反复执行
- 格式一:条件成立时,do和done之间反复循环,直到条件不成立就done
while [条件测试操作]
do
命令序列
done
实例
当1=1时,打印hello;此时会一直打印hello
- 格式二: 执行命令返回码为0时,执行do
while 命令
do
命令序列
done
以上两种格式又称之为死循环,还有两种死循环的表达方式
- while true
- while :
若想中止死循环,需要在命令序列内加入“let i++”
2、实例
- 打印出12345,上山打老虎
i=1
while [ $i -le 5 ]
do
echo $i
let i++
done
echo “上山打老虎”
- 计算1-100的偶数和
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
if [[ $i%2 -eq 0 ]];then
sum=$[$i+$sum]
fi
let i++
done
echo $sum
验证
3、break、continue、exit的区别
- break:退出当前循环
- continue:当前条件成立,执行下一层条件
- exit:直接退出脚本
实例
猜数字游戏,没有猜中一直猜,猜中即停止
#!/bin/bash
n=30
while true
do
read -p "请输入一个数字:" num
if [ $num -eq $n ];then
echo "你猜对了"
break
elif [ $num -gt $n ];then
echo "你猜小了"
elif [ $num -lt $n ];then
echo "你猜大了"
fi
done
~
这里拿一个打印1-5的例子具体讲解下三者的区别
只打印其中的1-5
#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
break
fi
let i++
done
一直打印5
#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
continue
fi
let i++
done
exit:可以指定输出内容
#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
exit 22
fi
let i++
done
四、until语句
1、格式
重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
实例
若1大于1,则输出11;结果是不停输出11
#!/bin/bash
until [ 1 -gt 1 ]
do
echo 11
done
以上成为死循环表达式,还有一张表达方式:
until false
2、实例
计算1-50的和
#!/bin/bash
i=1
sum=0
until [ $i -gt 50 ]
do
let sum=$i+$sum
let i++
done
echo $sum
验证