Темы в основном представляют собой кучу изображений (и может быть XML, который нуждается в синтаксическом разборе), так как пока вы держите изображения маленькими, вы не заметите, что они замедляют работу вашей системы, даже если вы используете свои собственные темы.
Ваш первый блок-код не будет работать, поскольку он попытается выполнить вывод 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: -)
|, который разделяет несколько альтернатив, является частью синтаксиса оболочки. Вы не можете получить его из строки: строка должна совпадать с символом | внутри.
Что вы можете сделать, это проверить, отображается ли имя службы как подстрока в списке разрешенных услуг, в окружении разделителей. Другими словами, проверьте, содержит ли список разрешенных служб службу в качестве подстроки. Поместите разделители вокруг имени службы в том случае, если оно является первым или последним в списке.
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
Вы можете использовать переменные в случае условий, но вы не можете передавать альтернативы таким образом. Один из способов сделать то, что вы хотите, - использовать 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]