Эквивалентно для ((c=1; c

#shell #aix

Вопрос:

У меня есть приведенный ниже код в оболочке для «для цикла»

 #!/bin/sh
for (( c=1; c<=5; c   ))
do
    echo "welcome $c times"
done
 

На бегу:
./test.sh

Ниже приведена ошибка:

 ./test.sh[2]: syntax error at line 2 : '(' unexpected.
 

Я перепробовал все возможные способы устранения этой ошибки.

 #!/bin/sh
for (( c=1; c<=5; c   )); do
    echo "welcome $c times"
done
 
 #!/bin/sh
for ( c=1; c<=5; c   )
do
    echo "welcome $c times"
done
 
 #!/bin/sh
for c=1; c<=5; c  
do
    echo "welcome $c times"
done
 
 #!/bin/sh
for (c=1; c<=5; c  )
do
    echo "welcome $c times"
done
 
 #!/bin/sh
for (( c=1; c<=5; c   ));
do
    echo "welcome $c times"
done
 

Я читал другие статьи, в которых указывался bash. У меня нет bash в моей системе, поэтому я не могу его использовать.

Любое решение проблемы .sh для этой проблемы было бы большим подспорьем.

Заранее спасибо!

Комментарии:

1. к вашему сведению. Я отредактировал свой выпуск. Вы можете взглянуть. Спасибо!

2. Если бы вы заявили, чего хотите достичь, мы могли бы помочь больше. Например seq 100 | while read N; do echo "N=$N"; done , это вариант.

3. У тебя есть кш?

4. @LorinczyZsigmond, seq не указан в POSIX и, следовательно, не более гарантированно будет доступен везде, чем bash он сам.

Ответ №1:

Интерпретатор sh оболочки не имеет циклической структуры, которую вы пытаетесь использовать. Вы можете использовать bash , если он существует в вашей системе, или изменить цикл, чтобы он читался следующим образом

 for c in 1 2 3 4 5
do
    echo "welcome $c times"
done
 

Для больших циклов, где перечисление значений нецелесообразно, вы должны реализовать цикл с while

 c=1
while [ $c -le 5 ]
do
    echo "welcome $c times"
    c=$((c 1))
done
 

Комментарии:

1. Спасибо за информацию. Поскольку данные слишком велики, я попытаюсь использовать цикл while.