Сравнение 4 переменных с использованием одного оператора if

Если вы запустите эту команду, вы получите два файла, один с именем stdoutи один с именем stderr, содержащие вывод на stdout и вывод на stderr . соответственно:

(source env_ora.sh >/dev/null; sh aclenv/arun) >stdout 2>stderr

Ваша команда grepвидит только те данные, которые отправлены на стандартный вывод . Он даже не видит данные, которые здесь записаны в stderr .

Взяв вариант вашего примера в последующем -комментарии, вы увидите, что только stdout проходит через конвейер для обработкиsed:

( echo "stdout"; echo "stderr" >&2 ) | sed 's/std/STD/'
stderr
STDout

Другая строка вывода записывается непосредственно в канал stderr , который по умолчанию подключен к вашему терминалу.

Таким образом, :конвейер прикрепляет стандартный вывод одной команды к стандартному выводу следующей. Канал stderr подключен к вашему терминалу, поэтому сообщения об ошибках (или обновления состояния )могут быть записаны туда, не влияя на поток фактических данных.

1
10.04.2018, 16:15
2 ответа

Просто измените условие if, как показано ниже:-

#!/bin/bash
a="abc"
b="abc"
c="deftdgr"
d="def"
if [[ $a = "$b" && $c == "$d"* ]]
then
    echo "inside if loop"
    #break you don't need this at all
else
    echo "inside else loop"
fi
0
28.01.2020, 00:37

Это называется логическим ANDлогическим оператором.

exp1 -a  exp2 returns true if both exp1 and exp2 are true.

Если вы сопоставляете строки, вы делаете:

  if [[ condition1 && condition2 ]]; then  echo "blah" ; fi 

Один из способов выразить это:

if [[ "$a" == "$b" && "$a" == "$c" ]]

При сравнении чисел вы делаете:

  if (( (a == b) && (a == c) )); then echo "blah" ; fi 

Док нажмите

0
28.01.2020, 00:37

Теги

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