2012-03-24 3 views
0

Я новичок в создании сценариев bash и пытаюсь выучить несколько вещей. Вот код, который я пробовал:while loop in 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 

Цикл обработки работает нормально, но цикл while не печатает желаемый результат. Результат цикла for и while должен быть одинаковым. Не могли бы вы рассказать мне, где я ошибся. Спасибо.

ответ

3

Одна из проблем заключается в том, что вам нужны пробелы вокруг скобок, так что bash знает, что они отдельные слова. То есть, это изменить:

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

к этому:

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

Другой является то, что это:

count='expr[$count+1]' 

фактически устанавливает переменную count к конкретной строке expr[$count+1]. То, что вы, кажется, имею в виду следующее:

count=$((count+1)) 

, который увеличивает значение count на 1.

+0

Параметр '[' на самом деле ссылка на '/ bin/test' (ОК, в' bash' это встроенный, но это, откуда приходит). Поэтому '[' это слово (точно так же, как 'ls'), и поэтому ему нужно пространство. –

+0

@BenJackson: Я думаю, что пространства понадобятся даже без этого; обратите внимание, что '[[' 'требует также пространства, даже если оно * является магическим по-другому. – ruakh

+0

Эй, спасибо за информацию, но я не понял, что count = 'expr [$ count + 1]' работал в цикле, но не работал в цикле while, не могли бы вы рассказать мне, почему? Спасибо. – surpavan

1

попробовать это:

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