[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: помогите с bash и условием



On Thu, Aug 22, 2013 at 02:55:15PM +0400, Владимир Скубриев wrote:
> On 22.08.2013 14:28, Sergey Korobitsin wrote:
> >Владимир Скубриев ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 14:23 +0400
> >
> >>есть команда, точнее набор команд
> >>echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
> >>
> >>if [ ОТРИЦАНИЕ + УСЛОВИЕ ];
> >>then
> >>   echo " ERROR"
> >>   exit 3
> >>fi
> >>
> >>Мне необходимо условие с отрицанием и желательно чтобы все было
> >>помещено в блок if [ ... ], т.е. в одну строку - желательно но не
> >>обязательно.
> >>
> >>Т.е. когда мой набор команд выполнен не успешно, то срабатывало то,
> >>что в блоке then иначе скрипт продолжал работать дальше
> >echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
> >if [ $? -ne 0 ]; then
> >    echo " ERROR"
> >    exit 3
> >fi
> >
> >А что в $TO_DISK_INFO? Можно оптимизировать.
> >
> Извиняюсь. работает! Это я уже просто запутался не тот серийник подсовывал.
> 
> Большое спасибо.

Немножко идей:

1. Заключайте $varname в "", чтоб шелу не вздумалось разбить значение
   'varname' на отдельных слов.  Я-то заключаю всегда, не мешает, быстро
   привикнул.

2. command; if [ "$?" -eq 0 ] точно то же самое как if command.

Так что:

if echo "$TO_DISK_INFO" | grep "$SERIAL_SHORT" | grep -q "$SERIALTO"; then
	...
fi

3. Я никогда не использую "grep", всегда использую или egrep, или fgrep:
  - fgrep быстрее для фиксированных низов
  - fgrep не интерпретирует специальных символов - ".", "[", "]", "*"...
  - egrep использует немножко поудобнее синтаксис extended regular
    expressions чем grep - не нужно столько \ ставить.

4. Подсовывайте опцию "-e" перед аргументом grep и sed.  Для единичного
   аргумента не очень полезно, но очень будет полезно, когда вздумается
   подавать второй и третий аргумент: fgrep -e exp1 -e exp2 ...

Так что:

if echo "$TO_DISK_INFO" | fgrep -e "$SERIAL_SHORT" | fgrep -qe "$SERIALTO"; then
	...
fi

Всего лучшего,
Петр

-- 
Peter Pentchev	roam@ringlet.net roam@FreeBSD.org p.penchev@storpool.com
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint 2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13
Thit sentence is not self-referential because "thit" is not a word.

Attachment: signature.asc
Description: Digital signature


Reply to: