shell中的整数加法

时间:2012-01-04 08:30:57

标签: linux bash shell

这是我简单的shell代码。我希望结果是2.Shell将所有内容视为字符串。 我怎么能这样做?

num=1
num=$(( $num + 1 ))

编辑:

完整代码:如果我想从1到10打印,那么这是错误的吗?

#! /bin/bash

num=1
until test $num -eq 10
do
    num=$(( $num + 1 ))
    echo $num
done

9 个答案:

答案 0 :(得分:13)

bash中,您无需执行任何特殊操作:

aix@aix:~$ num=1
aix@aix:~$ num=$(( $num + 1 ))
aix@aix:~$ echo $num
2

答案 1 :(得分:3)

@tonio;请不要提倡在不需要时使用子shell(`...或$(...))构造(为了避免混淆,$((...))不是子shell构造)。即使使用相当少量的数据,子shell也可以获得巨大的性能。对于每个使用外部程序进行某些操作的地方也是如此,这可以通过内置的shel来完成。

示例:

    num=1
    time while [[ $num -lt 10000 ]]; do
            num=$(( num+1 ))
    done
    echo $num
    num=1
    time while /bin/test $num -lt 10000; do
            num=$( /bin/expr $num + 1 )
    done
    echo $num

输出(在Linux上以ksh运行):

real    0m0.04s
user    0m0.04s
sys     0m0.01s
10000

real    0m20.32s
user    0m2.23s
sys     0m2.92s
10000

...因此运行时因子为250,CPU时间因子为100.我承认我使用的例子是夸张的,明确要求绕过所有内置函数,但我认为重点是make:创建新流程很费劲,尽可能避免,并且知道你的shell以识别创建新流程的位置。

答案 2 :(得分:1)

你刚刚做了:

$ num=1; num=$(( $num + 1 ));echo $num
2

注意 :您无需在$(( ))内引用变量。此外,您只需使用$((num++))

即可

答案 3 :(得分:1)

这可能对您有用:

num=1; ((num++)); echo $num
2

num=1; echo $((++num))
2

for loops

for num in {1..10}; do echo $num; done

或(至少在bash中)

for ((num=1; num<=10; num++)) { echo $num; }
当涉及更多编程时,

第二个循环更有用:

for (( num=1,mun=10; num<=10; num++,mun--)) { echo $num $mun; }

答案 4 :(得分:0)

试试这个

$ num=1; num=`expr $num + 1`; echo $num;

答案 5 :(得分:0)

使用((num++))作为递增num的简写。

$ num=1
$ ((num++))
$ echo $num
2

答案 6 :(得分:0)

你没有指定你正在使用哪个shell,但我知道的最简洁的形式是这个(至少在bash中起作用):

num=$[num+1]

如果仅增加一个并更改变量本身而不是打印/分配,则:

((num++))

是更好/更优雅的解决方案。请参阅dogbane的答案。

如果循环遍历值,我会改用这个形式:

for i in `seq 1 10`; do
   echo $i
done

答案 7 :(得分:-1)

适合我

$ num=1
$ num=$(( $num + 1 ))
$ echo $num
2

你得到什么输出?

详细了解bash Arithmetic @ tldp

修改

要在bash中执行10次操作,您可以使用(使用brace-expansion}

$ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10

但是,您无法在{}之间使用变量。如果是这种情况,请改用seq

答案 8 :(得分:-1)

您可以使用以下内容:

num=1
num=`expr $num + 1`

它也适用于非bash shell,如ksh。