для цикла / условия if в сценарии оболочки - PullRequest
4 голосов
/ 06 августа 2010

Я никогда раньше не создавал сценарий оболочки, и теперь я сталкиваюсь с простой проблемой ... У меня есть цикл for, который выполняется каждый раз при запуске сценария run.sh.Чтобы увидеть, как далеко уже запущен скрипт, я хочу напечатать, например, каждые 5000 фактический индекс.

$counter = 0
for ((  i = 0 ;  i <= 5000;  i++  ))do
    if ($i =  $counter); then
            echo "$counter"
            counter=$(counter+1000)
    fi
./run.sh
done

выполнение этого фрагмента кода дает мне следующую ошибку

./for_loop.sh: line 1: =: command not found
./for_loop.sh: line 3: 0: command not found

У меня естьтакже попытался инициализировать счетчик переменных с помощью

declare -i counter = 0

, что приводит к следующей ошибке

./for_loop.sh: line 1: declare: `=': not a valid identifier

Ответы [ 3 ]

6 голосов
/ 06 августа 2010

Вам не нужны два счетчика.Достаточно одного счетчика:

for (( counter = 0; counter <= 5000; counter++ ))
do
    if (( counter % 1000 == 0 ))
    then
            echo "$(( counter / 1000 ))"
    fi
    ./run.sh
done

. Он выполняется run.sh 5000 раз и печатает значение счетчика каждые 1000 итераций.Обратите внимание, что % является оператором модуля, который вычисляет остаток после деления, а / является оператором целочисленного деления.

4 голосов
/ 06 августа 2010

Строка 1 должна быть: (без $, без пробелов вокруг '=')

counter=0

Строка 3 должна быть: (Квадратные скобки, '-eq', поскольку '=' для равенства строк)

if [ $i -eq $counter ]

Строка 5 должна быть: (Двойные скобки)

counter=$((counter+1000))
1 голос
/ 06 августа 2010

В строке 3, я полагаю, вы ошиблись присвоением = для равенства ==

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...