bash增量变量
如何在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))
的脚本中,只需将其替换为下表中的任何方法即可。
数量 | 增量变量 |
---|---|
1 | var=$((var+1)) |
2 | var=$((var++) |
3 | ((var=var+1)) |
4 | ((var+=1)) |
5 | ((var++) |
6 | (++var)) |
7 | let“var=var+1” |
8 | let “var+=1” |
9 | let“var++” |
10 | let var=var+1 |
11 | 让var+=1 |
12 | let var++ |
13 | declare -var var; var=var+1 |
14 | declare -var var; var+=1 |
15 | var=$(expr $var + 1) |
16 | var=expr $var + 1 |