bash shell中while循环出错

时间:2013-05-11 18:10:41

标签: unix

我是UNIX的初学者。在编写while循环时,我遇到了一个愚蠢的错误。

代码: -

$ x=0
$ while [ $x -lt 10 ]
> do
> echo $x
> x=´echo "$x + 1" | bc´
> done;

我收到了错误: -

0
bc´: command not found   
0
bc´: command not found
0
bc´: command not found
...

任何人都可以帮助我吗?我不知道shell编程。

4 个答案:

答案 0 :(得分:1)

如果您正在x=´echo "$x + 1" | bc´增加x(这是danf指出的错误),请使用以下

x=`expr $x + 1`

还要注意空格...... bash非常挑剔

这是输出 -

xxxx@cse:~> x=5
xxxxx@cse:~> while [ $x -lt 10 ]; do echo $x; x=`expr $x + 1`; done;
5
6
7
8
9

您可以使用bc来实现此功能,但最好使用expr

xxxx@cse:~> x=5
xxxx@cse:~> while [ $x -lt 10 ]; do echo $x; x=`echo "$x + 1"|bc`; done;
5
6
7
8
9

答案 1 :(得分:0)

您好像有一个解析错误。你需要一个反引号。将行更改为:

x=`echo "$x + 1" | bc`

答案 2 :(得分:0)

不要使用反引号来执行子命令,使用$( cmd ),这个结构可以嵌套。也许你为了学习的目的用管道做bc算术,否则,shell能够以多种方式做到这一点

$((x+=1))
x=$((x+1))
$((++x))
$((x++))
HTH和亲切的问候

答案 3 :(得分:0)

你没有使用反引号。使用`(又名严重口音,又名U + 0060)(在美国键盘的左上角找到)而不是'(又名急性口音,又名U + 00B4)。

例如,以下工作正常:

x=0
while [ $x -lt 10 ]; do
  echo $x
  x=`echo "$x + 1" | bc`
done

你和我之间的唯一区别是用来引用echo "$x + 1" | bc的标记。

话虽如此,如果您碰巧使用bash(或类似bash的shell),那么有更好的方法来制作相同的循环。例如:

x=0
while (( x++ < 10  )); do
  echo $x
done

这样做的好处是既快又快(因为它不调用外部程序)并且更容易阅读(因为它使用更传统的编码语法)。