Логичный И в сценарии удара

Сервер Weblogic требователен в отношении hwo, который он запускает. Делает сценарий /sbin/init.d/weblogic запустите WLS как корень идентификатора пользователя, или он делает "su" к некоторому WLS-определенному идентификатору пользователя? Мне кажется, что WLS отказывается работать в соответствии с идентификатором пользователя root.

Другая вещь попробовать, измените владение /sbin/init.d/weblogic соответствовать другим сценариям в /sbin/init.d/.

10
18.09.2016, 19:21
4 ответа

Если Вы хотите любого затем, что Вы хотите OR, нет AND.

if [[ ! -f /etc/benchmarking/code ]] || [[ ! -f /etc/benchmarking/code.class ]]; then
 echo "match"
fi
  • Это будет соответствовать, если или или оба файла будут отсутствовать.
  • Ваш код только распечатает match если оба не существуют.

Но, Вы сказали:

Я на 110% уверен, что эти 2 файла не существуют. Я не получаю ошибок, это просто не входит если.

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

Если Вы хотите видеть как Ваш if оператор оценивает, выполните его с -x.

#!/bin/bash -x
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
 echo "match"
fi

Затем Вы будете видеть выполнение.

$ ./test.sh
+ [[ ! -f /etc/benchmarking/code ]]
+ [[ ! -f /etc/benchmarking/code.class ]]
+ echo match
match
$ 
12
27.01.2020, 20:01
  • 1
    , я хочу, чтобы это повторило "соответствие", если никакой файл не существует, если Вы существуете, это не печатает соответствие. Я попробую его-x –  Peppercat101 13.09.2012, 12:46
  • 2
    В этом случае Ваш исходный код должен быть прекрасным. И действительно это работает на меня. –  bahamat 13.09.2012, 20:55

Разве это не должно быть похожим на это? A является файлом, или B является файлом, затем blabla.

if [[ -f /etc/benchmarking/code ]] || [[ -f /etc/benchmarking/code.class ]]; 
then  
  echo "match"
fi
3
27.01.2020, 20:01

Это может также работать на то, что Вы пытаетесь сделать. Одиночные скобки не являются наиболее часто используемыми сегодня с ударом, но это - все еще опция. Используя '-o' эффективно "ИЛИ" операция, и"!" инвертирует условие.

var=/etc/benchmarking/code
[ ! -f ${var} -o -f {var}.class ] && echo "match"
3
27.01.2020, 20:01
  • 1
    Никогда не использовать [ в bash. Кроме этого, мне не удается видеть, как это отвечает на вопрос. –  jw013 13.09.2012, 16:52
  • 2
    [ ! -f ${var} -a ! -f {var}.class ] && echo "match" это должно быть. Поиски были: если они (оба) не существуют, это должно echo match. –  hschou 02.09.2016, 18:56

Ваш код удовлетворяет вашим требованиям: он напечатает совпадение при условии, что он не может найти ни один файл.

Следовательно, причина совпадения не печатается в другом месте. Вы должны подтвердить, что блок кода достигнут, что вы можете сделать, окружив его парой отладочных сообщений. Например, вот так:

echo '@ About to enter if...fi block'
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
 echo "match"
fi
echo '@ Finished if...fi block'

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

echo '@ About to enter if...fi block' >&2
0
27.01.2020, 20:01

Теги

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