2012-03-24 101 views
0

我刚刚接触bash脚本并试图学习一些东西。这里是我试过的代码:while bash中的循环

n=$1 
shift 

echo "Printing your name $n times" 
count=1 
for ((i=1;i<=$n;i++)) 
do 
    echo [email protected] -$i 
    count='expr[$count+1]' 
done 

echo 'New Model' 
count=1 
while ["$count" -le "$n"] 
do 
    echo [email protected] -$i 
    count='expr[$count+1]' 
done 

for循环工作正常,但while循环没有打印所需的结果。 for循环的结果和while应该是相同的。你能告诉我我哪里出了问题吗?谢谢。

回答

3

一个问题是您需要括号内的空格,以便bash知道它们是单独的单词。也就是说,改变这种:

while ["$count" -le "$n"] 

这样:

while [ "$count" -le "$n" ] 

另一个原因是这样的:

count='expr[$count+1]' 

实际上是设置变量count特定字符串expr[$count+1]。你似乎意思是这样的:

count=$((count+1)) 

其增加1

+0

的'['实际上是为'/ bin/test'链接(确定,在'bash'它是一个内置的,但这是它从何而来)。所以'''是一个词(就像'ls'),这就是为什么它需要空间。 – 2012-03-24 21:05:22

+0

@BenJackson:我认为即使没有这些空间也是需要的;注意'[[''也需要空格,即使它*在其他方面是神奇的。 – ruakh 2012-03-24 21:07:24

+0

嘿,非常感谢您的信息,但是我不明白的是count ='expr [$ count + 1]'在for循环中工作,但在while循环中没有工作,请问为什么?谢谢。 – surpavan 2012-03-25 05:31:12

1

中的count值试试这个:

count=1 
while [ "$count" -le "$n" ] 
do 
echo [email protected] -$i 
count=`expr $count + 1` 
done 

需要有在while条件的空间。而count的增量需要反引号而不是单引号来执行该命令并将其分配给一个变量。

2

其他方式来增加变量:

#!/bin/bash 

count=1 

#count=`expr $count + 1 ` 
#((count++)) 
#count=$[$count + 1] 
#count=$[count + 1] 
#let count=count+1 
#let count++ 
#count=$((count + 1)) 

echo $count