Числа печати от 1-50

Я не думаю, что Вам нужна исполнительная команда в Вашем примере. Можно ли попробовать nohup строку без него? Попробуйте это:

nohup sh -c "$FISHEYE_CMD $@ $FISHEYE_ARGS >> $FISHEYE_INST/var/log/fisheye.out 2>&1" &

Если вышеупомянутое не работает, можно хотеть попытаться использовать bash вместо sh. Попробуйте это:

nohup bash -c "$FISHEYE_CMD $@ $FISHEYE_ARGS >> $FISHEYE_INST/var/log/fisheye.out 2>&1" &

Наконец, если бы ни одно из этих предложений работа, я попытался бы избавиться от "оболочки-c" аргумент все вместе. Попробуйте это:

nohup "$FISHEYE_CMD $@ $FISHEYE_ARGS >> $FISHEYE_INST/var/log/fisheye.out 2>&1" &

Ссылки

5
08.12.2014, 13:47
8 ответов

На 5-й линии: Изменить $x=(($x + 1)) на x=$(($x + 1)).

Вместо того, чтобы использовать весь скрипт bash, вы можете просто использовать seq 1 50.

Если бы дело было x=$(($x + 2)), вы могли бы использовать seq 1 2 50, где 2 обозначает шаг/включение.

8
27.01.2020, 20:31

Bash , как ksh ksh и, возможно, некоторые другие снаряды в родом поддерживают арифметические петли:

for ((x=1;x<=50;x++)); do
    echo $x
done
1
27.01.2020, 20:31

Использовать диапазоны расширения Brace

Другие ответы могут обращаться Как отладить свой скрипт. Этот ответ показывает вам более простой (и менее подверженный ошибкам) ​​способ сделать то, что вы хотите использовать расширение Bash , чтобы генерировать диапазон вместо увеличения петли.

Например, для печати чисел 1- 50, используя эту запись, вы можете использовать следующий фрагмент:

for x in {1..50}; do
    echo $x
done 

Это правильно напечатает каждое число в последовательности, но полагается на функции Bash, которые не являются портативными через оболочки. Если вам нужна портативность, рассмотрите возможность использования SEQ вместо этого.

5
27.01.2020, 20:31

На линии 5: Измените $ x = (($ x + 1)) на x = $ (($ x + 1)) .

Вместо использования всего сценария bash можно использовать seq 1 50 .

В случае x = $ (($ x + 2)) можно использовать seq 1 2 50 , где 2 обозначает шаг/приращение.

-121--65771-

Оболочка не является (хорошим) языком программирования, это (прежде всего) интерпретатор командной строки. Если требуется выполнить подсчет, используйте команду подсчета, а не команды echo и [ в цикле.

Например, системы GNU имеют для этого команду seq . Альтернативные варианты: awk или bc например:

seq 50
echo 'for (i=1; i<=50; i++) i' | bc
awk 'BEGIN {for (i=1; i<= 50; i++) print i}'

Если вы обнаружите, что используете петлю в оболочках, возможно, вы идете к неправильному подходу.

12
27.01.2020, 20:31

Существует программное обеспечение под названием BASH отладчик и другое программное обеспечение будет shellcheck , которое даст вам общие ошибки, но не все.

В вашем скрипте в строке 5 используйте квадратные скобки:

x=$[ $x + 1 ]

Обновление

Или

x=$(( $x + 1 ))

Первая из них описана, лучше использовать вторую. Не используйте $ перед x, который идет перед знаком =

.
3
27.01.2020, 20:31

Из вашего другого вопроса об округлении десятичных дробей, я вижу, что вы хотите сделать это только на бэше. Так что, кроме других ответов, вы можете сделать это и так.

#!/bin/bash
x=1
while [[ $x -le 50 ]]
do
    echo $x
    x=$(expr $x + 1)
done
1
27.01.2020, 20:31
#!/bin/bash
for i in $(seq 1 50)
do
echo $i
done

изменить :извините за публикацию моего ответа, не прочитав путеводитель, и спасибо Стивену Китту за редактирование моего ответа.

Таким образом, в этом скрипте я получаю вывод seq 1 50 с подстановкой команд $()и повторяю эту выводную (последовательность чисел от 1 до 50 )с помощью forи печатаю каждый iв этой последовательности сecho $i

И только потому, что вы пытаетесь вывести числа с помощью цикла, я реализую это с помощью цикла. seq 1 50или echo {1..50}также дадут эти числа без использования итерации.

1
27.01.2020, 20:31

В системах с командой jot(Системы BSD):

jot 50
1
27.01.2020, 20:31

Теги

Похожие вопросы