for循环

目录

for循环

for语句

命令序列

根据IP地址检查主机状态

1-100 1一直追加到100求和

执行结果

1-100偶数求和

步长

转义符


for循环

循环:在一定的条件下,避免进入死循环,重复的执行命令或者代码,节约了大量的时间,也提高了脚本的复用率

遍历:对一组数据中的每一个元素进行访问的过程,进行操作或者输出

二者的区别在于

循环是一种控制流程的结构,用于重复执行代码

遍历是访问,访问数据

在绝大多数情况下,循环遍历是结合使用的

for语句

for 变量名 in 取值范围

do

命令序列

done

for 已知的循环次数场景

for((;;))死循环

批量创建用户读取opt目录下已经创建好的文本文件里的内容作为用户

根据IP地址检查主机状态

IP地址存放在ipadds.txt文件中,每行一个

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

ping通的ip地址保存到/opt/hosts.txt文件中

 

这个脚本可以正确地实现从ipadds.txt中读取IP地址并ping测试,如果ping测试成功(即退出状态码为0),则将该IP地址追加到/opt/hosts.txt文件中。它的执行过程如下:

  • 循环读取ipadds.txt文件中的每个IP地址。

  • 对每个IP地址执行ping测试,测试次数为3次。

  • 检查ping测试的退出状态码,如果为0,则将该IP地址追加到/opt/hosts.txt文件中。

  • 继续下一个IP地址的ping测试,直到所有IP地址都被测试过。

需要注意的是,这个脚本没有对ping测试中的标准输出进行处理,如果一个IP地址ping测试成功,输出将会打印到终端上。如果需要将输出重定向到另一个文件中,需要使用重定向命令来实现,例如:

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

在这个修改后的脚本中,将标准输出重定向到/opt/ping.log文件中,并将标准错误重定向到与标准输出相同的文件描述符中。通过使用重定向将输出写入另一个文件中,可以避免输出干扰ping测试结果的判断。

循环的次数

for i in {1..5}
do
  echo $i
done

这条命令将会循环执行5次,每次循环将会将变量i赋值为从1到5的整数。在每次循环中,将会输出变量i的值。将这段脚本保存为test.sh文件,然后通过bash命令运行,将会得到下面的输出:

$ bash test.sh 1 2 3 4 5

这个for循环可以用来遍历一些需要执行多次的操作,例如对一组文件进行批量操作、向多个URL发送请求等。在循环内部,可以根据不同的需求来编写具体的命令和操作。

类c语言格式

for((i=1;i<=5;i++))

for ((i=1; i<=5; i++))
do
  echo $i
done

这条命令将会循环执行5次,每次循环将会将变量i赋值为从1到5的整数。在每次循环中,将会输出变量i的值。将这段脚本保存为test.sh文件,然后通过bash命令运行,将会得到下面的输出:

$ bash test.sh 1 2 3 4 5

使用基于C语言的for循环写法可以支持更丰富的循环控制语法,例如跳出循环、修改循环变量等。然而,这个写法在一些情况下也可能会造成代码的可读性和维护性降低,需要根据具体的需求来选择合适的for循环写法。

1-100 1一直追加到100求和

mrj=0
for i in {1..100}
do
  mrj=$((mrj+i))
done
​
echo "1~100的和为:$mrj"

 

 

set -x
sum=0
for ((i=1;i<=10;i++))
do
sum=$[ $i+$sum ]
echo $sum
done
set +x

执行结果

 [root@localhost ~]# sh ip.sh
+ sum=0
+ (( i=1 ))
+ (( i<=10 ))
+ sum=1
+ echo 1
1
+ (( i++ ))
+ (( i<=10 ))
+ sum=3
+ echo 3
3
+ (( i++ ))
+ (( i<=10 ))
+ sum=6
+ echo 6
6
+ (( i++ ))
+ (( i<=10 ))
+ sum=10
+ echo 10
10
+ (( i++ ))
+ (( i<=10 ))
+ sum=15
+ echo 15
15
+ (( i++ ))
+ (( i<=10 ))
+ sum=21
+ echo 21
21
+ (( i++ ))
+ (( i<=10 ))
+ sum=28
+ echo 28
28
+ (( i++ ))
+ (( i<=10 ))
+ sum=36
+ echo 36
36
+ (( i++ ))
+ (( i<=10 ))
+ sum=45
+ echo 45
45
+ (( i++ ))
+ (( i<=10 ))
+ sum=55
+ echo 55
55
+ (( i++ ))
+ (( i<=10 ))
+ set +x

 

这个代码主要是用来计算1~10的整数和,并输出每次循环后的累加结果。你提到的 set -xset +x 命令是用来开启和关闭 bash 调试模式,它们能够输出每一行命令执行的详细信息,包括变量赋值和命令执行的返回结果等,并会输出当前执行的函数和执行的命令。具体的代码含义如下:

set -x #命令用于开启bash调试模式,这会输出每一行命令执行的详细信息。

sum=0 #命令用于初始化sum变量,用来保存每次循环后的累加结果。

for ((i=1;i<=10;i++))# 命令用于循环迭代1到10的整数,每次循环会将当前整数的值加到sum变量中去。

sum=$[ $i+$sum ] #命令用于将当前整数的值加到sum变量中去,并将结果赋值给sum变量。

echo $sum #命令用于输出当前循环位置时sum变量的值,即每次循环后的累加结果。

set +x #命令用于关闭bash调试模式,停止输出详细的命令执行信息。

这段代码的主要执行过程是:先将sum变量初始化为0,然后循环1到10的整数范围,每次循环将当前i的值加到sum变量中去,并输出当前循环完毕后累加的结果。最后,代码关闭了调试模式。所以,当你运行这个脚本后,它会输出1到10的每个整数以及它们累加和的结果。

1-100偶数求和

 

sum=0
for i in {i=2;i<=100;i+=2}
do
sum=$[$i+$sum]
done
echo $sum

在这个示例中,首先将sum变量初始化为0。然后使用for循环遍历2到100范围内的偶数,将每个偶数累加到sum变量中。循环结束后,输出累加结果。

将这个脚本保存为sum_even.sh文件,然后通过bash命令运行,将会得到下面的输出:

$ bash sum_even.sh # 假设脚本文件名为sum_even.sh 2550 # 输出偶数之和

或者还有一种方法

 

步长

sum=0
for i in `seq 2 2 10`
do
sum=$(($i+$sum))
done
echo $sum

这个脚本用来计算2-10之间的所有偶数之和。代码主要使用了for循环和shell命令seq来生成由2、4、6、8、10组成的一列偶数,并将所有偶数相加求和,最后输出结果。具体的代码含义如下所示:

  1. sum=0 这一行代码用来初始化变量sum,用于后续累加每个偶数的值。

  2. for i inseq 2 2 10` 是一个for循环语句,其中使用了shell命令seq来生成由2、4、6、8、10组成的一列偶数。seq 2 2 10`表示生成一个从2开始,步长为2,不超过10的整数序列。

  3. sum=$(($i+$sum)) 这一行代码将当前变量i的值加入变量sum中,并将累加结果重新赋值给变量sum。

  4. echo $sum 输出结果。

将这个脚本保存为sum_even.sh文件,然后通过bash命令运行,将会得到下面的输出:

$ bash sum_even.sh        # 假设脚本文件名为sum_even.sh
30                        # 输出偶数之和

注意,这个脚本仅仅是用来计算2到10之间的偶数之和,如果要计算其他范围内的偶数之和,可以修改此脚本中的循环范围和参数。

转义符

常用转义字符 echo -n 表示不换行输出 echo -e 输出转义字符,将转义后的内容输出到屏幕上 echo -ne 只有加了-e才能执行下面的转义符: 常用的转义字符如下: \b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。

\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

\n 换行,被输出的字符从"\n"处开始另起一行。

\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v 与\f相同;

\t 转以后表示插入tab,即横向制表符;

\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

\ 表示插入""本身;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值