использование awk в сценарии удара, с если

Вот решение:

Откройте cmd и выполните эти команды:

regsvr32 /u netfxperf.dll
regsvr32 netfxperf.dll

Примечание: Кажется, что, если Вы выполняете профилировщика, и уничтожают IIS, не останавливая его сначала, Вы получаете эту проблему.

1
задан 13 April 2017 в 15:14
3 ответа

Awk является неверным решением здесь. Как насчет:

if [[ "$task" =~ ^Clean ]]; then
  echo hello
fi

Существует также подлый метод замены:

if [ "${task/#Clean/}" != "$task" ]; then
  echo hello
fi

Но я нахожу что быть намного менее читаемым.


Chris считает, что случай более опрятен..., давайте испытаем это:

case $task in
  Clean*)
    echo hello
    ;;
esac

Мой эстетический смысл говорит "ад не со звонками на", и играющий с форматированием (Clean*) echo hello;; или подобный), не поможет многому, IMAO. Если Вы хотите условное выражение, используйте if, Я говорю.

4
ответ дан 3 December 2019 в 18:15
  • 1
    Можно использовать случай для материала как это; it' s обычно вполне немного более опрятный. –  chris 17 November 2009 в 18:45
  • 2
    Хорошая вещь об операторах выбора состоит в том, что они устраняют большие большие груды если; затем; elif; затем; elif; затем; еще; структуры fi, и у них есть лучшее соответствие регулярного выражения, чем тест. –  chris 17 November 2009 в 20:15
  • 3
    Ну, когда мы добираемся до наличия большого количества if/elif блоков вовлечение той же переменной , мы можем переключиться на использование оператора выбора. Кроме того, случай использует расширение пути (примерно, globbing), тогда как [[ =~ использование фактический регулярные выражения. –  womble♦ 17 November 2009 в 20:28

Ответ Womble, вероятно, для чего я пошел бы, но можно также использовать grep:

if echo cleanarf | grep -qi '^clean'; then 
   echo foo
fi

Отбросьте i переключитесь на grep, если Вы хотите его чувствительный к регистру (или если Вы не хотите его нечувствительный к регистру :-p).

0
ответ дан 3 December 2019 в 18:15
  • 1
    Это менее читаемо, IMAO, и медленнее потому что он включает порождение отдельного процесса. –  womble♦ 17 November 2009 в 18:59
  • 2
    Согласованный, именно поэтому я сказал, что выберу Ваш ответ :-P Но варианты хороши. –  Kyle Brandt 17 November 2009 в 19:03

В Вашем первом примере Вы используете echo обеспечить awk с файлом (stdin), но в Вашем сценарии, нет никакого файла для awk для обработки и это "подвешивает" ожидание входа. Вы могли использовать echo в Вашем переменном присвоении в $(), но я предпочитаю использовать /dev/null с этой целью (т.е. когда нет никакого фактического файла для обработки).

Для предотвращения неловкого заключения в кавычки можно использовать переменную передачу с -v опция предоставить переменные Bash awk сценарий.

Необходимо найти, что это работает:

idx=$(awk -v task="$task" '{print index(task, "Clean")}' /dev/null)
echo $idx
if [ "$idx" == "0" ]; then
   echo hello
fi

Необходимо, вероятно, использовать предложение womble, тем не менее, так как оно не требует порождения отдельного процесса.

0
ответ дан 3 December 2019 в 18:15

Теги

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