2015-10-19 3 views
1

Сценарий должен проверить, не является ли OLD_VERSION пустым или если он не соответствует определенному шаблону. Я попытался код ниже«или» в сценариях bash

#!/bin/bash 
OLD_VERSION="ABCDEFGHIJKL" 
PATTERN="ABC" 
if [[ ! "$OLD_VERSION" =~ "$PATTERN" ]] || [[ ! -z "$OLD_VERSION" ]]; 
then 
    echo "Not matched or not null" 
else 
    echo "matched or null" 
fi 

Для указанных входов:

bash -x re.sh 
+ OLD_VERSION=ABCDEFGHIJKL 
+ PATTERN=ABC 
+ [[ ! -z ABCDEFGHIJKL ]] 
+ echo 'Not null or doesnot match' 

я получаю ниже выходной:

Not null or doesnot match 

, а также, когда я делаю OLD_VERSION нуля, я получаю не нуль или doesnot match, где я ожидаю, что он будет печатать нуль.

$OLD_VERSION="" 

+ PATTERN=ABC 
+ OLD_VERSION= 
+ [[ ! -z '' ]] 
+ [[ ! '' =~ ABC ]] 
+ echo 'Not null or doesnot match' 

Я получаю неправильный выход. Я получаю проблемы в или. Что я делаю не так?

UPDATE:

как предложено sureshvv, я обновил это нравится:

if [[ ! "$OLD_VERSION" =~ "$PATTERN" && ! -z "${OLD_VERSION}" ]] ; 
then 
    echo "Not null or doesnot match" 
else 
    echo "matched or null" 
fi 

Спасибо всем.

+1

определить 'неправильно output' – amdixon

+0

вопрос обновлен @amdixon – no1

+0

мая быть легче читать, если вы избавитесь от двойного отрицательного. Поэтому вы можете сказать, что если [-z "$ OLD_VERSION" || "$ OLD_VERSION" = ~ "$ PATTERN"]; затем эхо-сигнал нулевой или согласованный; fi – sureshvv

ответ

3

Я думаю, что вы хотите:

if [[ ! -z "$OLD_VERSION" && "$OLD_VERSION" =~ "$PATTERN" ]]; then 
    echo Matched 
else 
    echo No match 
fi 
+0

спасибо. Но я получил «соответствие», когда я делаю old_version null – no1

+0

Я получил желаемый результат, когда я изменил его как «если [[! -z« $ OLD_VERSION »&&!" $ OLD_VERSION "= ~" $ PATTERN "]], затем« – no1

+0

проверьте, если вы перевернули заказ (ответ противоположный по порядку эха) – amdixon

-1

|| обрабатывается командой [[, так что вы должны положить его в [[ и ]]

if [[ ! "$OLD_VERSION" =~ "$PATTERN" || ! -z "$OLD_VERSION" ]]; 
+1

Или он может использоваться как оператор цепи отказа команды bash. –

Смежные вопросы