循环语句:
1、for循环语句
2、while循环语句
3、untli循环语句
1.1 for语句的结构
读取不同的变量值,用来逐个执行同一组命令
1.2、for循环语句的三种语句结构用法
for语句结构:
第一种:
for 变量名 in 取值列表
do
命令序列
done
第二种:
for 变量名
do
命令序列
done
第三种:
for((i=1;i<3;i++))
do
命令序列
done
第一种语句结构
示例打印出数字1 2 3 4 5
#!/bin/bash
#打印出数字12345
for i in {1..5} 也可以写成1 2 3 4 5
do
echo $i
done
示例三次hello
#!/bin/bash
#打印三次hello
for i in a b c
do
echo hello
done
示例打印五次hello(引用变量seq)
#!/bin/bash
#打印三次hello
for i in `seq 5`
do
echo hello
done
另一种打印五次hello
#!/bin/bash
#打印三次hello
a=5
for i in `seq $a`
do
echo hello
done
for语句调用文件内容作为取值列表
首先创立一个文件vim best.txt 在文件里输入1 2 3 4 5
#!/bin/bash
for i in `cat best.txt`
do
echo hello 执行命令之后会输出五次
done
~
第二种语句结构示例
#!/bin/bash
for i 后面不加取值列表
do
echo $i
done
~
另一种情况
#!/bin/bash
for i
do
echo 12345
done
~
第三种语句结构示例
#!/bin/bash
#打印三次12345
for ((a=1;a<4;a++)) 定义a的初始值为1,a++代表每次加1,一共三种情况,所以输出三次同理也可以这样写a=4;a>4;a--
do
echo 12345
done
1.3、for和if的混合用法
示例
#!/bin/bash
#打印出1——100之间的双数
for i in {1..100}
do
if [[ $i%2 -eq 0 ]];then
echo $i
fi
done
~
示例
#!/bin/bash
#求1——100的的和
sum=0
for i in {1..100}
do
sum=$[$sum+$i]
done
echo $sum
~
执行结果成功为5050
示例
打开vim liebiao.txt填写内容 xukangle zhangsan wangwu
#!/bin/bash
#多个用户,如果系统存在,输出已存在,如果不存在就创建
for name in `cat liebiao.txt` 引用该文件内容
do
id $name &> /dev/null
if [ $? -eq 0 ];then
echo "该用户已存在"
else
useradd $name
echo "123" | passwd --stbin $name &> /dev/null
echo "已创建用户$name,并设置密码"
fi
done
示例
#!/bin/bash
#批量创建10个用户,stu打头,并创建密码,输出用户已创建
for i in {1..10}
do
useradd stu$i &> /dev/null
echo "123" | passwd --stbin stu$i &> /dev/null
echo "stu${i}已创建"
done
示例
#!/bin/bash
#ping同一网段主机
for i in {1..254}
do
ping -c 192.168.153.$i &> /dev/null
if [ $i -eq 0 ];then
echo "ping通"
else
echo "ping不通"
fi
done
示例
#!/bin/bash
ip=192.168.153
for i in {1..254}
do
ping -c 2 -i 0.2 $ip.$! &> /dev/null
if [ $? -eq 0 ];then
echo "$ip.$i 在线"
else
echo "$ip/$i 不在线"
fi
done
#!/bin/bash
#打出5个星星
for i in {1..5}
do
echo "*"
done
#!/bin/bash
#打出5个星星
for i in {1..5}
do
echo -n "* " 加入-n为输出内容为横向
done
#!/bin/bash
#打出5个星星
for i in {1..5}
do
echo -n "* "
done
echo
#!/bin/bash
#打出星星矩阵
for j in {1..5}
do
for i in {1..5}
do
echo -n "* "
done
echo
done
#!/bin/bash
#打出星星任意大小的矩阵
read -p "输入矩阵的规模:" x
for ((j=1;j<=$x;j++))
do
for ((i=1;i<=$x;i++))
do
echo -n "* "
done
echo
done
#!/bin/bash
#打出直角三角形任意大小的矩阵
read -p "输入直角三角形矩阵的规模:" x
for ((j=1;j<=$x;j++))
do
for ((i=1;i<=$j;i++))
do
echo -n "* "
done
echo
done
2.1、while语句的结构
定义:重复测试某个条件,只要条件成立则反复执行
2.2while语句的用法
示例
#!/bin/bash
while [ 1 -eq 1 ]
do
echo hello
done
执行命令后会一直循环输出hello
#!/bin/bash
while true (或者是:)
do
echo hello
done
执行命令后会一直循环输出hello
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo $i
let i++
done
#!/bin/bash
#求1??100的和
i=1
sum=0
while [ $i -le 100 ]
do
let sum=$i+$sum
let i++
done
echo $sum
#!/bin/bash
#求1??100的偶数和
i=1
sum=0
while [ $i -le 100 ]
do
if [ $((i%2)) -eq 0 ];then
let sum=$i+$sum
fi
let i++
done
echo $sum
2.3三个退出用法
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
#!/bin/bash
#循环1到10,让他1到5就退出
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
break
fi
let i++
done
#!/bin/bash
#循环1到10,让他1到5就退出
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
continue
fi
let i++
done
执行命令后不会识别i++,会一直输出5
#!/bin/bash
#循环1到10,让他1到5就退出
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
exit
fi
let i++
done
echo xxx
返回码的使用
#!/bin/bash
#循环1到10,让他1到5就退出
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -ge 5 ];then
exit 33 指定一个返回码
fi
let i++
done
echo xxx
3.1、until语句结构用法
定义:重复测试某个条件,只要条件不成立则反复执行
#!/bin/bash
until [ 1 -lt 1]
do
echo 11
done
执行命令后会一直循环11