0

我是 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

4 回答 4

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
于 2013-05-11T18:27:50.293 回答
0

不要使用反引号来执行子命令,使用$( cmd ),这个构造可以嵌套。也许您出于学习目的使用管道到 bc 进行算术运算,否则,shell 能够以多种方式执行此操作

$((x+=1))
x=$((x+1))
$((++x))
$((x++))

HTH 和亲切的问候

于 2013-05-11T18:29:23.903 回答
0

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

x=`echo "$x + 1" | bc`
于 2013-05-11T18:22:45.277 回答
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

这具有更快(因为它不调用外部程序)和更易于阅读(因为它使用更传统的编码语法)的优点。

于 2013-05-11T18:34:17.360 回答