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