Сценарий Bash: проверьте список команд

Можно сделать это так же как это:

ECHO Start of Loop

FOR /L %i IN (1,1,5) DO (
  ECHO %i
)

Эти 1,1,5 декодируются как:

(start,step,end)

Также отметьте при встраивании этого в пакетный файл необходимо будет использовать двойной знак процента (%%) для добавления префикса переменных, иначе интерпретатор команд попытается оценить переменную %i до выполнения цикла.

1
задан 12 January 2012 в 05:37
2 ответа

Необходимо постараться не помещать команды в переменные.

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

ps -o pid,pcpu,cmd -C ${2// }

Это разделит все пробелы, хотя, поэтому если какая-либо из Ваших командных строк содержит пробелы, это разрушит их. Это разделит продвижение и конечные пробелы и пробелы по обе стороны от запятых:

commands=${2/# }          # leading space
commands=${command/% }    # trailing space
commands=${command/, /,}  # spaces after commas
commands=${command/ ,/,}  # spaces before commas
ps -o pid,pcpu,cmd -C "$commands"

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

1
ответ дан 4 December 2019 в 01:59

Это могло работать с для цикла

arguments="command1 command2 command3 command4 command5"
for arg in $arguments
do
    ps -o pid,pcpu,cmd -C $arg
done

результаты:

ps -o pid,pcpu,cmd -C command1
ps -o pid,pcpu,cmd -C command2
ps -o pid,pcpu,cmd -C command3
ps -o pid,pcpu,cmd -C command4
ps -o pid,pcpu,cmd -C command5

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


Для вызова его из командной строки путем, я объяснил в комментарии, просто используют $* поймать все аргументы передало.

for arg in $*
do
    ps -o pid,pcpu,cmd -C $arg
done

затем назовите его как это:

./test.sh command1 command2 command3 command4 command5 command6

и это выполнит команду PS с каждым аргументом.

0
ответ дан 4 December 2019 в 01:59

Теги

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