文档章节

如何在 Bash 中对变量递增或者递减

问题终结者
 问题终结者
发布于 09/19 09:15
字数 786
阅读 6
收藏 0
导读 编写 Bash 脚本时最常见的算术运算之一是递增和递减变量。这通常在循环中用作计数器,但它也可以在脚本的其他地方出现。

递增和递减意味着分别从数值变量的值中添加或减去值(通常为 1 )。可以使用双括号 ((...)) 和 $((...)) 或使用内置的 let 命令执行算术扩展。

在 Bash 中,有多种方法可以加/减变量。本文解释了其中的一些内容。

使用 + 和 - 操作员

加/减变量的最简单方法是使用 + 和 - 运算符。

i=$((i+1))
((i=i+1))
let "i=i+1"

i=$((i-1))
((i=i-1))
let "i=i-1"

此方法允许您将变量递增/递减所需的任何值。

以下是在 until 循环中递增变量的示例:

i=0

until [ $i -gt 3 ]
do
  echo i: $i
  ((i=i+1))
done

i: 0
i: 1
i: 2
i: 3

使用 += 与 -= 运算符

除了上面解释的基本运算符之外, bash 还提供赋值运算符 += 和 -= 。这些运算符用于使用运算符后指定的值递增/递减左操作数的值。

((i+=1))
let "i+=1" 

((i-=1))
let "i-=1"

在接下来的 while 循环中,我们将 i 变量的值递减 5 。

i=20

while [ $i -ge 5 ]
do
  echo Number: $i
  let "i-=5" 
done

Number: 20
Number: 15
Number: 10
Number: 5

使用 ++ 和 -- 运算符

在 ++ 和 -- 分别运营商增量和减量,其操作 1 和返回值。

((i++))
((++i))
let "i++"
let "++i"

((i--))
((--i))
let "i--"
let "--i"

可以在操作数之前或之后使用运算符。它们也被称为:
•前缀增量: ++i
•前缀减量: --i
•后缀增量: i++
•后缀减量: i--

前缀运算符首先让变量加/减 1 ,然后返回变量的新值。后缀运算符在变量加/减之前返回运算符的值。

如果您只想增加/减少变量,那么如果您使用前缀或后缀运算符则没有区别。只有在某些其他操作中使用运算符的结果或将其分配给另一个变量时,它才会有所不同。

以下示例演示了 ++ 操作符在其操作符之前和之后使用时的工作方式:

x=5
y=$((x++))
echo x: $x
echo y: $y

x: 6
y: 5

x=5
y=$((++x))
echo x: $x
echo y: $y

x: 6
y: 6

下面是在 bash 脚本中使用的示例:

#!/bin/bash
i=0
while true; do
  if [[ "$i" -gt 3 ]]; then
       exit 1
  fi
  echo i: $i
  ((i++))
done

使用这些运算符的缺点是变量只能递增或递减 1 。

结论

Bash 中的变量的递增和递减可以以许多不同的方式执行。无论使用何种方法,结果都是一样的。

原文来自: https://www.linuxprobe.com/linux-bash-add.html

本文转载自:https://www.linuxprobe.com/linux-bash-add.html

问题终结者
粉丝 25
博文 1334
码字总数 225091
作品 0
运维
私信 提问
如何判断mysql 某个表里某一个字段是递增或者递减的?

如何判断mysql 某个表里某一个字段是递增或者递减的? 不是判断是否是自增字段,是直接sql语句取出某个字段值是递增或者递减的字段。

co_o2o
2015/11/13
384
2
LeetCode.896-单调数组(Monotonic Array)

这是悦乐书的第345次更新,第369篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第210题(顺位题号是896)。如果数组单调递增或单调递减,则数组是单调的。如果对于所有i <= ...

小川94
06/06
0
0
JS第二天

对象到其他类型之间的数据转换 对象到boolean 非空对象 是true 空对象(是null,不是{}) false 对象到字符串 调用对象的toString方法。 String(o);//String()调用o的toString(); o.toString(...

清枫_小天
2016/09/03
0
0
JavaScript 编程规范(二)

1. 总是使用 const 或 let 来声明变量。 不这样做会导致产生全局变量。 我们希望避免污染全局命名空间。 2. 将所有的 const 和 let 分组 。 当你需要把已分配的变量分配给一个变量时非常有用...

大灰狼的小绵羊哥哥
03/07
0
0
redis incr incrby decr decrby命令

redis中incr、incrby、decr、decrby属于string数据结构,它们是原子性递增或递减操作。 incr递增1并返回递增后的结果; incrby根据指定值做递增或递减操作并返回递增或递减后的结果(incrby递增...

xiaomin0322
2018/04/03
57
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部