shell编程之for循环

shell编程之for循环

一.for语句

1.什么是for循环

在一定条件之内重复一个动作,可以通过代码需要执行重复执行的动作,节约了大量的时间,提高了脚本的复用率。

2.for语句的结构

读取不同的变量值,用来逐个执行同一组命令

格式:

for 变量名 in 取值对象
do
 命令序列
done

在这里插入图片描述

3.for语句中常用转义字符

echo -n:表示不换行输出
echo -e:输出转义字符,将转义后的内容输出到屏幕上
常用的转义字符如下(只有echo -ne)加了e才能执行):
\b:转义后相当于按退恪键(backspace),但前提是"\b"后面存在字符;""b"表示删除前一个字符,""bb"表示删除前两个字符。 
\c:不换行输出,在""c"后面不存在字符的情况下,作用相当于echo -n;但是当""c"后面仍然存在字符时,"kc"后面的字符将不会被输出。in换行,被输出的宁符从"In"处开始另起一行.
\f:换行,但是换行后的新行的开头位詈连接着上一行的行尾;w与f相同;
\t:转以后表示插入tab,即横向制表符;
\r:光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖
\表示插入""本身。

二.for语句应用示例

1.批量添加用户

要求:用户名存放在users.txt文件中,每行一个

初始密码均设为123456

验证脚本

for i in $(cat /opt/users.txt)
do
 useradd $i
echo 123456 | passwd --stdin $i
done

在这里插入图片描述
在这里插入图片描述

2.根据IP地址检查主机状态

要求:IP地址存放在iPadds.txt文件中,每行一个

使用ping命令检测各主机的连通性

并将ping通的地址保存在/opt/hosts.txt文件中

for i in $(cat /opt/ipadds.txt)
do
 ping -c 3 $i
 if [ $? -eq 0 ]
then
 echo $i >> /opt/hosts.txt
fi
done

在这里插入图片描述

三.循环的次数

2.1求1-100的整数求和
set -x
sum=0
for ((i=1;i<=100;i++))
do
sum=$[$sum+$i]
echo $sum
done
set +x
2.2 1-10的奇偶求和
num1=0
num2=0
for i in {1..10}
do
if (( $i % 2 == 0 ))
then
 num1=$(($num1+$i))
else
 num2=$(($num2+$i))
 fi
done
echo $num1
echo $num2

在这里插入图片描述

3.步长——seq

跳跃,每次加2,一直到10

3.1 1-10的偶的互相加
for i in `seq 2 2 10`
do
 echo $i
done

在这里插入图片描述

3.2 1-100 的偶数相加
sum=0
for i in `seq 2 2 100`
do
sum=$(($i+$sum))
done
 echo $sum

在这里插入图片描述

3.3 1-100的奇数相加
sum=0
for i in `seq 1 2 100`
do
sum=$(($i+$sum))
done
 echo $sum

在这里插入图片描述

3.4打印九九乘法表
for i in {1..9}——————————打印行几次循环1-9
do
 for ((j=1;j<=i;j++))——————循环1-9,每次都要小于i
echo -ne "$i*$j=$[$i*$j]\t"———— -n不换行,-e使用转义符
done
echo————每循环一次后从下一行开始
done

在这里插入图片描述

3.4 小于100的整数

提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

在这里插入图片描述
在这里插入图片描述

3.5判断文件里的用户是否存在

用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码
在这里插入图片描述
在这里插入图片描述

3.6检测指定范围主机是否通信

检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

在这里插入图片描述
在这里插入图片描述

3.7用户输入密码,脚本判断密码是否正确

用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
在这里插入图片描述

在这里插入图片描述

3.8十进制数转换成8位数二进制数

使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数

在这里插入图片描述在这里插入图片描述

3.9用for循环计算

用for循环算出 某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,请问这只猴子在第一天总共摘了多少根香蕉?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zikLA6lT-1685603927660)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230529173730604.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cFYMIbB2-1685603927660)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230529173740159.png)]

用for循环计算

用for循环算出 某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,请问这只猴子在第一天总共摘了多少根香蕉?

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值