shell之forwhileuntil循环双重循环
Posted 阳光小王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell之forwhileuntil循环双重循环相关的知识,希望对你有一定的参考价值。
shell之for、while、until循环、双重循环
shell编程循环语句
- 读取不同的变量值,用来逐个执行同一组命令
格式:
for 变量名 in 聚会列表
do
命令序列
done
- for执行命令图
- 求1-100的整数和
/1-100整数和:
[root@localhost ~]# sum=0
[root@localhost ~]# for i in $(seq 1 100)
> do
> sum=$[$sum + $i]
> done
[root@localhost ~]# echo $sum
5050
for语句应用示例
- 批量添加用户
- 用户名存放在users.txt文件中,每行一个,初始密码设置为123456,验证脚本
创建一个users文本文件
vim users.txt
新那一个shell脚本文件
vim demo1.sh
#!/bin/bash
user=$(cat ~/users.txt) /将users.txt文件内容赋值给user变量
for i in $user
do
useradd $i
echo 12345 | passwd --stdin &> /dev/null
/一个一个设置密码,并将提示信息吸入黑洞
done
-----------------------------------------------------------
验证脚本
cat /etc/passwd
cat /etc/shadow
- 根据IP地址查看主机状态
#!/bin/bash
ip=$(cat ~/ping.txt)
for a in $ip
do
ping -c 3 -i 0.5 -W 2 $a &> /dev/null
if [ $? -eq 0 ]; then //格式一定要注意留空格
echo "主机在线:"
else
echo "主机不在线:"
fi
done
while语句结构
while语句结构
while 条件测试操作
do
命令序列
done
- 根据特定条件反复执行一个命令序列,直到不满足条件为止
- 编写时可能会出现死循环,要避免这种情况发生
- true(真)和false(假)为特殊条件测试操作,也可以在if语句的条件测试中使用
- true作为条件时,表示条件永远成立,无限执行,也就是死循环,需要强制终止
- false作为条件时,表示条件不成立,不执行命令序列
while小实验
- 批量添加用户; 用户名称以stu开头,按数字顺序进行编号
vim demo2.sh
#!/bin/bash
a=1
while [ $a -le 10 ]
do
useradd stu$a
echo 123456 | passwd --stdin stu$a
let a++
done
- 猜商品价格
- 通过变量RANDOM获得随机数
- 提示用户猜测并记录次数,猜中后退出循环
#!/bin/bash
jg=$[ $RANDOM % 1000 ]
a=1
zcs=0
while [ $a -lt 2 ]
do
read -p "请输入商品价格:" p
if [ $p -eq $jg ]; then
echo "恭喜你猜对了!"
let zcs++
let a++
elif [ $p -gt $jg ]; then
echo "你猜高了,请重新输入:"
let num++
elif [ $p -lt $jg ];then
echo "你猜小了,请重新输入:"
let num++
fi
done
echo "你总共猜了$num 次"
until语句
与while相反,重复测试某个条件,只要条件不成立则反复执行
- 格式
until条件测试操作 while 未超过10
do do
命令序列 数字依次递增
done done
- 使用until计算1-50的和
#!/bin/bash
a=1
sum=0
until [ $a -gt 50 ]
do
sum=$[$sum+$a]
let a++
done
echo "1-50的和为:$sum"
双重循环
双重循环-for循环
- 外循环一次,内循环全部执行一遍
vim dmo1.sh
#!/bin/bash
for ((a=1;a<=5;a++))
do
echo "外层循环:$a "
for ((b=1;b<=6;b++))
do
echo -e "\\t 内层循环:$b "
done
done
-----------------------------------------------
bash dmo1.sh
外层循环:1
内层循环:1
内层循环:2
内层循环:3
内层循环:4
内层循环:5
内层循环:6
......
外层循环:5
.
.
- break 退出当前循环
- break 2 退出2重循环
#!/bin/bash
for ((a=1;a<=5;a++))
do
echo "外层循环:$a "
for ((b=1;b<=5;b++))
do
if [ $b -eq 5 ]; then
break 2
fi
echo -e "\\t 内层循环:$b "
done
done
-------------------------------------
运行结果:
外层循环:1
内层循环:1
内层循环:2
内层循环:3
内层循环:4
- continue,当条件成立时,终止当前执行的命令,继续执行后面的命令
#!/bin/bash
for ((a=1;a<=5;a++))
do
echo "外层循环:$a "
for ((b=1;b<=5;b++))
do
if [ $b -eq 3 ]; then
continue
fi
echo -e "\\t 内层循环:$b "
done
done
-------------------------------
运行结果:外循环1-5
内循环跳过3
内层循环:5
外层循环:5
内层循环:1
内层循环:2
内层循环:4
内层循环:5
- exit:表示异常退出 ,退出脚本
- exit 1/2:表示异常退出,并且返回参数值
- 用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
vim dmo2.sh
#!/bin/bash
mm=123456
for i in {1..3}
do
read -p "请输入密码:" psswd
if [ $psswd == $mm ]; then
echo "密码输入正确!"
exit
fi
done
echo "警告!你已经输入过多!"
--------------------------------------
运行结果:
[root@localhost ~]# bash dmo2.sh
请输入密码:4
请输入密码:5
请输入密码:6
警告!你已经输入过多!
[root@localhost ~]# bash dmo2.sh
请输入密码:123456
密码输入正确!
IFS
默认包含 空格,制表符,换行符
查看命令:set | grep IFS
IFS=$' \\t\\n'
#!/bin/bash
lsbl=$IFS /设置临时变量
IFS=$IFS: /以:作为分割符
for a in $( echo $PATH)
do
echo "$a"
done
IFS=$lsbl /程序执行完再使临时变量赋值给IFS,使参数值不会被改变
-----------------------------------------------------------------
查看环境变量:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
运行结果:
[root@localhost ~]# bash dmo4.sh
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
从文件定向导入
#!/bin/bash
while read line /line 为变量
do
echo $line
done <name.txt
使用双重for循环实现九九乘法表
#!/bin/bash
a=1
b=1
for((a=1;a<=9;a++))
do
for((b=1;b<=a;b++))
do
sum=$[$a * $b]
echo -ne "$a*$b=$sum\\t"
done
echo " " /输出空格换行
done
----------------------------------------------
运行结果:
[root@localhost ~]# bash dmo5.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
以上是关于shell之forwhileuntil循环双重循环的主要内容,如果未能解决你的问题,请参考以下文章