整数加在shell中

这是我的简单的shell代码。 我想要的结果是2.Shell视为一个string的一切。 我怎样才能做到这一点?

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

编辑:

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

 #! /bin/bash num=1 until test $num -eq 10 do num=$(( $num + 1 )) echo $num done 

bash ,你不需要做任何特别的事情:

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

@tonio; 请不要提倡在不需要时使用subshel​​l(`…或$(…))结构(为了避免混淆到最大值,$((…))不是一个子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运行):

实际0m0.04s
用户0m0.04s
 sys 0m0.01s
 10000

真正的0m20.32s
用户0m2.23s
 sys 0m2.92s
 10000

…所以运行时间因子为250,CPU时间因子为100.我承认我使用的例子是一个夸张的例子,明确要求绕过所有内置函数,但我认为这一点是:创建新的进程是费用支出,尽可能地避免它,并且知道你的shell来识别新进程的创建地点。

你刚刚做了:

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

注意 :您不需要在$(( ))内引用变量。 另外,你可以使用$((num++))

这可能适合你:

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

要么

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

for循环

 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; } 

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

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

尝试这个

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

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

 num=$[num+1] 

如果只是递增1并且改变变量本身而不是打印/赋值,那么:

 ((num++)) 

是一个更好/更优雅的解决方案。 看到dogbane的答案。

如果循环的值,我会使用这种形式,而不是:

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

为我工作

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

你会得到什么输出?

阅读更多关于bash Arithmetic @ tldp

编辑

要在bash中做10次,可以使用(使用括号扩展 )

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

但是,您不能在{}之间使用变量。 如果是这种情况,请使用seq代替。

你可以使用像这样的东西:

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

它也将使用非bash shell,如ksh。