Скрипты Bash: список папок в переменной и grep точное имя каталога - PullRequest
1 голос
/ 08 августа 2011

Вот моя проблема. Чтобы получить список каталогов, где находится файл GC.xml:

EXBRANDS= find / var / www / html / -maxdepth 3 -имя "GC.xml" -типа f | awk -F '/' '{print $ 5}' ;

#echo $EXBRANDS

#dir1 dir2 dir3 (it appears exactly like this)

#read var

Введите "dir", например

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

echo $EXBRANDS | grep "[ $var]\|[$var ]\|[ $var]" if [[ $? -eq 0 ]] ; then ..... else ..... fi;

Я думаю, что есть проблема с моей командой grep, как будто я передаю значение "dir" в $ var, моя команда grep фактически находит каталог и возвращает $? = 0

Мое желание - получить $? = 0, только если он находит именно шаблон $ var в моей команде grep ...

Каковы лучшие варианты grep (egrep) здесь? Или мой метод совершенно глуп?

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Ваш EXBRANDS содержит много строк, и вы теряете эти строки с эхом.

Я бы сделал это по-другому:

read var
find /var/www/html/ -maxdepth 3 -name "GC.xml" -type f | awk -F '/' '{print $5}' | grep "^$var\$"
if [[ $? -eq 0 ]] ; then ...  else ... fi;

Убедитесь, что grep соответствует точной строке с конструкцией "^$var\$".

Редактировать : вы также можете printf "$EXBRANDS" | grep "^$var\$" вместо эха, это может решить вашу проблему.

1 голос
/ 08 августа 2011

Попробуйте использовать границы слов:

if [ ! -z "$var" ] ;  
    then echo $EXBRANDS | grep -e "\b$var\b"; 
    if [[ $? -eq 0 ]] ; 
        then echo "Y"; 
        else echo "N"; 
    fi;
    else echo "input dir must be not null"; 
fi;

РЕДАКТИРОВАТЬ : добавить нулевую проверку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...