bash增量变量

时间:2020-01-09 10:37:23  来源:igfitidea点击:

如何在bash shell脚本中增加变量。
如何为每个for循环的变量加1。
如何在bash中增加计数器。
如何执行bash变量加1。

在本教程中,我们将讨论这些问题。
在我的上一篇文章中,我们了解了串联字符串的方法,该方法部分涵盖了类似的增加变量的主题。
现在让我们了解在使用循环时在shell脚本中添加值和递增变量的知识。

带for循环的增量变量

示例1:

在本节中,我们将执行一个for循环,该循环将基于变量值进行迭代。

该变量的值将递增到定义的阈值。

#!/bin/bash
for (( i=0; i <= 5; i++ )); do
    echo $i
done

这里,

  • 我们为i = 0定义了一个初始值,因此循环将从" 0"开始,我们可以将其更改为希望从其开始的任何其他值

  • 然后第二个条件是阈值,我们其中定义最大值,直到执行循环为止。
    在我们的情况下,循环将一直运行到" i"小于或者等于" 5",但是我们可以根据需要选择其他任何条件运算符。

  • 第三个条件是我们将变量i的值加1

该脚本的输出:

示例2:

在此示例中,我们还将使用for循环,但是现在我们没有要迭代的数字列表,而是有一个主机列表。
我想对单个主机执行一些操作,但是我也不想循环运行超过3秒,因此我将引入超时。

因此,其中:我们的超时变量将在每个循环中递增,一旦超时值等于3,则循环将中断:

#!/bin/bash
declare -a hosts="ab cd ef gh ij"
timeout=1
for host in ${hosts[@]}; do
    echo $host
    if [[ $timeout -eq 3 ]];then
       echo "timed out"
       break
    fi
    sleep 1
    timeout=$((timeout+1))
done

这里我们通过在每个循环的末尾使用timeout = $((timeout + 1))加1来增加变量,我们也可以使用[[timeout ++))来将超时变量加1. 。

但是我更喜欢第一个,因为我在那里有更多的控制权,如果我需要将变量增加任何其他值(例如" 5"),那么我们可以将代码更新为" timeout = $((timeout + 5))"。
`

另外,我们也可以使用`(((timeout = timeout + 1))),这也可以给我们提供一个添加自定义值以进行增量的选项。
因此,现在超时变量将在每个循环中增加" 5"。

该脚本的输出:

使用while循环将变量加1

示例1:

现在让我们以while循环为例。
我们可能需要在相应的某行中更新文件的内容,因此我们可以使用while循环逐行读取文件。
在同一脚本中,我们可以添加一个将对行号进行计数的变量,并基于此行号变量执行内联操作。

例如,我想在/etc/sysconfig/grub文件的GRUB_CMDLINE_LINUX变量的行中添加ipv6_disable = 1. 现在,此条目必须作为该行的最后一个条目添加。

所以,

  • 我们将使用while循环来读取文件

  • 将行号捕获到" LINE"变量中

  • 根据来自LINE的行号,我们将使用sed执行操作

以下是我的示例脚本,其中包含所有注释,以了解脚本:

因此,我们已使用该代码来增加行号,与for循环更早版本LINE = $((LINE + 1))一起使用。

使用此类变量进行递增时,我们始终必须记住两件事

  • 我们必须像定义LINE = 1一样首先初始化一个空变量,作为脚本的开始

  • 初始化必须在开始循环之前完成,就像我们在循环内定义它一样,每次变量增加时初始值都会改变,这不会给出正确的结果

因此,脚本可以按预期工作,它会检查重复的条目,并添加" ipv6_disable = 1"以通过使用" LINE"获取行号来禁用IPv6.

通过增加计数器来检查成功和失败的方案

现在,在以上所有示例中,我们都通过将变量加1来利用增量变量来执行某些任务。
现在,我们将增加计数器只是为了确定命令执行的状态,然后使用它来结束执行。

在此脚本中,我们检查目标主机的连接性。
为了验证同样的结果,我添加了一个失败的变量,如果ping测试失败,那么我将增加计数器值。
一旦ping测试完成,我将检查失败的变量的值是否大于我们初始化的值,即" 0",然后相应地通知用户。

该脚本的输出:

~]# ./check_hosts.sh
One or more hosts have failed connectivity test

现在,如果我们还需要列出失败主机的列表,则可以使用+ =操作符来连接变量中的字符串。

在bash中执行增量操作的不同方法

这里有一个合并的方法列表,我们可以根据shell和环境选择方法来增加变量。

在上面我使用过((failed ++))或者LINE = $(($LINE + 1))的脚本中,只需将其替换为下表中的任何方法即可。

数量增量变量
1var=$((var+1))
2var=$((var++)
3((var=var+1))
4((var+=1))
5((var++)
6(++var))
7let“var=var+1”
8let “var+=1”
9let“var++”
10let var=var+1
11让var+=1
12let var++
13declare -var var; var=var+1
14declare -var var; var+=1
15var=$(expr $var + 1)
16var=expr $var + 1