Вытягивание нескольких альтернатив из переменной в случае условия

Темы в основном представляют собой кучу изображений (и может быть XML, который нуждается в синтаксическом разборе), так как пока вы держите изображения маленькими, вы не заметите, что они замедляют работу вашей системы, даже если вы используете свои собственные темы.

1
задан 15 July 2013 в 22:01

3 ответа

Ваш первый блок-код не будет работать, поскольку он попытается выполнить вывод tomcat6 с помощью команды james.

Во всяком случае, case, вероятно, не подходит инструмент для этого. Используйте массив, а затем проверьте на это:

#!/bin/bash
declare -a ALLOWED_SERVICES
ALLOWED_SERVICES=(james tomcat6)

for servicename in ${ALLOWED_SERVICES[*]};
do
        if [ "${servicename}" == "${1}" ];
        then
          service $1 restart
          exit
        fi

done

echo $0: Error: service \"$1\" not recognized

EDIT: также: используйте bash: -)

2
ответ дан 25 May 2018 в 06:46

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

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

case "$1" in
  *\|*) echo 1>&2 "$0: Invalid service name: $1"; exit 2;;
esac
case "|$ALLOWED_SERVICES|" in
  *"|$1|"*) service "$1" restart;;
  *) echo 1>&2 "$0: Unknown or forbidden service: $1"; exit 2;;
esac
2
ответ дан 25 May 2018 в 06:46

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

#!/bin/sh

ALLOWED_SERVICES="tomcat6|james";

SERVICE="unknown"
[ -n "$1" ] && SERVICE="$1"

CHECKSRV=$(echo $SERVICE | sed 's/[a-z0-9_]*//i')
[ -n "$CHECKSRV" ] && exit 2


eval "
case \"$SERVICE\" in
    ${ALLOWED_SERVICES} )
        service \"$SERVICE\" restart
    ;;
    * )
    echo \"Unsupported argument\"
    ;;
esac
"

Я лично предпочел бы другое решение использовать eval, но, учитывая проверку с помощью фильтра sed, вам должно быть хорошо идти. [ ! d1]

0
ответ дан 25 May 2018 в 06:46

Другие вопросы по тегам:

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