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

2013-08-23 Пенетрантность Peter Pentchev
On Fri, Aug 23, 2013 at 12:50:03AM +0400, Artem Chuprina wrote:
 Sergey Korobitsin - debian-russian@lists.debian.org  @ Thu, 22 Aug 2013 
 20:31:31 +0600:
 
   Ну, if умеет отрицание:
   
   if ! echo $TO_DISK_INFO | fgrep -e $SERIAL_SHORT | fgrep -qe 
 $SERIALTO; then
 ...
   fi
   
 
 [...]
 
   
   Так что if ! echo ... ; then ... сделает нужное.
 
  SK Да, надо читать маны :-(. Я почему-то решил, что оно будет относиться к
  SK первой команде в пайпе. А вообще, лучше perl взять, там unless есть :-).
 
 Еще можно написать
 
 if command
 then
 :
 else
 содержательный текст
 fi
 
 sh-совместимо, кстати.

if ! ... тоже sh- (и POSIX-)совместимо, я другого никогда не рекомендовал :)

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

-- 
Peter Pentchev  r...@ringlet.net r...@freebsd.org p.penc...@storpool.com
PGP key:http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint 2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13
I am the thought you are now thinking.


signature.asc
Description: Digital signature


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

2013-08-23 Пенетрантность Artem Chuprina
Peter Pentchev - debian-russian@lists.debian.org  @ Fri, 23 Aug 2013 11:13:32 
+0300:

  Еще можно написать
  
  if command
  then
  :
  else
  содержательный текст
  fi
  
  sh-совместимо, кстати.

 PP if ! ... тоже sh- (и POSIX-)совместимо, я другого никогда не рекомендовал 
:)

Боюсь, что это POSIX-, но не sh-совместимо.  В смысле, мы, кажется,
ходили по этим граблям в Solaris.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/87zjs8rbsq@wizzle.ran.pp.ru



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

2013-08-23 Пенетрантность Владимир Скубриев

On 22.08.2013 18:33, Andrey Melnikoff wrote:

Любите вы всё усложнять на пустом месте. пайпов вагон, зачем?

спору нет

#/bin/sh

TO=/dev/sdb
SERIAL=RTF57NGH

if [ $(udevadm info --query=all -n ${TO} | grep -c SERIAL_SHORT=${SERIAL}) != 
1 ]; then
echo blah-blah
fi

ы?



)
спасибо


--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/52172d8e.8050...@skubriev.ru



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

2013-08-23 Пенетрантность Andrey Tataranovich
16:53 Thu 22 Aug, Владимир Скубриев wrote:
 On 22.08.2013 16:43, Andrey Tataranovich wrote:
 14:35 Thu 22 Aug, Владимир Скубриев wrote:
 TO=/dev/sdb
 SERIAL=RTF57NGH
 TO_DISK_INFO=`udevadm info --query=all -n $TO`
 
 echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
 # проверяем результат последней команды
 if [ $? -ne 0 ];
 then
echo  Parametr SERIALTO do not correspond hard drive TO -
 Exiting, beacuse we cannot delete ALL DATA ...
echo  ... !!! BE Careful !!! ...
exit 3
 fi
 Проверить наличие нужного диска можно проще:
 
 BACKUP_DISK=/dev/disk/by-id/usb-Easy_Disk_AA040127_007375-0:0
 if [ ! -b $BACKUP_DISK ]; then
  echo Correct backup disk not found: $BACKUP_DISK 2
  exit 1
 fi
 
 Я стремился к универсальности, вот:
 
 #!/bin/bash
 
 FROM=$1
 TO=$2
 SERIALTO=$3
 
 TO_DISK_INFO=`udevadm info --query=all -n $TO`
 
 if [ ! $# == 3 ]; then
   echo Usage: FROM TO SERIALNUMBER_OF_DISK_TO
   exit 1
 fi
 
 if [[ ! -b $2 ]] || [[ ! -b $1 ]]; then
   echo First | Second parametr is not a valid Block device
   exit 2
 fi
 
 echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
 if [ $? -ne 0 ]; then
   echo  Parametr SERIALTO do not correspond hard drive TO -
 Exiting, beacuse we cannot delete ALL DATA ...
   exit 3
 fi
 
 echo $TO_DISK_INFO | grep ID_BUS | grep -qi usb
 if [ $? -ne 0 ]; then
   echo  This disk is not USB Backup Disk - Exiting, beacuse we
 cannot delete ALL DATA ...
   exit 4
 fi

Ваш вариант сложнее. В моем варианте проверяется все необходимое, чтобы
не стереть неверный диск. И константу BACKUP_DISK можно сразу использовать
в скрипте вместо /dev/sd?.

-- 
WBR, Andrey Tataranovich


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/20130823115155.ge12...@tataranovich-pc.local.aitoc.com



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

2013-08-22 Пенетрантность Владимир Скубриев


есть команда, точнее набор команд
echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO

if [ ОТРИЦАНИЕ + УСЛОВИЕ ];
then
  echo  ERROR
  exit 3
fi

Мне необходимо условие с отрицанием и желательно чтобы все было помещено 
в блок if [ ... ], т.е. в одну строку - желательно но не обязательно.


Т.е. когда мой набор команд выполнен не успешно, то срабатывало то, что 
в блоке then иначе скрипт продолжал работать дальше


Ни как не могу так сделать.

Я не знаю как правильно написать выражение и добавить к нему отрицание.

Спасибо.

--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru



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

2013-08-22 Пенетрантность Sergey Korobitsin
Владимир Скубриев ☫ → 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? Можно оптимизировать.

-- 
Bright regards, Sergey Korobitsin,
Chief Research Officer
Arta Software, http://arta.kz/
xmpp:underta...@jabber.arta.kz

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


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130822102807.gd...@undertaker.dev.lan.arta.kz



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

2013-08-22 Пенетрантность Sergey Korobitsin
Sergey Korobitsin ☫ → To debian-russian@lists.debian.org @ Thu, Aug 22, 2013 
16:28 +0600

  помещено в блок if [ ... ], т.е. в одну строку - желательно но не
  обязательно.

Вариантов масса, на самом деле, например, вот:

die () {
echo  ERROR
exit 3
}

echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO || die

-- 
Bright regards, Sergey Korobitsin,
Chief Research Officer
Arta Software, http://arta.kz/
xmpp:underta...@jabber.arta.kz

--
...Когда я увидел перед собой перспективу жизни, прожитой так же, 
как живет весь мир, я решил - ни за что, это отвратительно, 
мне будет стыдно самого себя. Если бы я участвовал в поддержке 
этой системы отчужденного, собственнического программирования, 
мне казалось бы, что я делаю мир хуже ради денег. 
  -- Ричард М. Столлман (из интервью)


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130822103314.ge...@undertaker.dev.lan.arta.kz



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

2013-08-22 Пенетрантность Владимир Скубриев

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? Можно оптимизировать.


TO=/dev/sdb
SERIAL=RTF57NGH
TO_DISK_INFO=`udevadm info --query=all -n $TO`

echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
# проверяем результат последней команды
if [ $? -ne 0 ];
then
  echo  Parametr SERIALTO do not correspond hard drive TO - 
Exiting, beacuse we cannot delete ALL DATA ...

  echo  ... !!! BE Careful !!! ...
  exit 3
fi


Проверил не работает я так уже пробывал.

Результат команды проверял = 0 , через echo $?
P.S. $? - результат последней команды
Пробывал также

if [ $? -ne 1 ];
if [ ! $? -ne 1 ];

не работает.

--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/5215e96c.1010...@skubriev.ru



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

2013-08-22 Пенетрантность Владимир Скубриев

On 22.08.2013 14:33, Sergey Korobitsin wrote:

Sergey Korobitsin ☫ → To debian-russian@lists.debian.org @ Thu, Aug 22, 2013 
16:28 +0600


помещено в блок if [ ... ], т.е. в одну строку - желательно но не
обязательно.

Вариантов масса, на самом деле, например, вот:

die () {
echo  ERROR
exit 3
}

echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO || die


Ну как вариант, только мне кажется нагроможденней получается

--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/5215ea8b.9030...@skubriev.ru



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

2013-08-22 Пенетрантность Владимир Скубриев

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? Можно оптимизировать.


Извиняюсь. работает! Это я уже просто запутался не тот серийник подсовывал.

Большое спасибо.

--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/5215ee13.3010...@skubriev.ru



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

2013-08-22 Пенетрантность Sergey Korobitsin
Владимир Скубриев ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 
14:35 +0400

 On 22.08.2013 14:28, Sergey Korobitsin wrote:

 TO=/dev/sdb
 SERIAL=RTF57NGH
 TO_DISK_INFO=`udevadm info --query=all -n $TO`
 
 echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO

А кто такой $SERIALTO? Что-то не вижу его объявления. А если его нет, то
в grep -q подставится пустая строка, и он всегда будет выдавать 0.

-- 
Bright regards, Sergey Korobitsin,
Chief Research Officer
Arta Software, http://arta.kz/
xmpp:underta...@jabber.arta.kz

--
А у меня мой стул укатил кто-то. Он был помечен
на правой ручке моей белой нашейной ленточкой
от флешки Transcend. Фиг с ним, со стулом, ленточку
жалко
-- mirat @ https://projects.arta.local/forum/message.php?msg_id=173


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130822105720.gf...@undertaker.dev.lan.arta.kz



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

2013-08-22 Пенетрантность Владимир Скубриев

On 22.08.2013 14:57, Sergey Korobitsin wrote:

Владимир Скубриев ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 
14:35 +0400


On 22.08.2013 14:28, Sergey Korobitsin wrote:
TO=/dev/sdb
SERIAL=RTF57NGH
TO_DISK_INFO=`udevadm info --query=all -n $TO`

echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO

А кто такой $SERIALTO? Что-то не вижу его объявления. А если его нет, то
в grep -q подставится пустая строка, и он всегда будет выдавать 0.


он просто раньше задается )
серийник винта на который бэкапить
это скрипт автоматического бэкапа на usb винт

--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/5215f100.9090...@skubriev.ru



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

2013-08-22 Пенетрантность Peter Pentchev
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  r...@ringlet.net r...@freebsd.org p.penc...@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.


signature.asc
Description: Digital signature


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

2013-08-22 Пенетрантность Andrey Tataranovich
14:35 Thu 22 Aug, Владимир Скубриев wrote:
 TO=/dev/sdb
 SERIAL=RTF57NGH
 TO_DISK_INFO=`udevadm info --query=all -n $TO`
 
 echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
 # проверяем результат последней команды
 if [ $? -ne 0 ];
 then
   echo  Parametr SERIALTO do not correspond hard drive TO -
 Exiting, beacuse we cannot delete ALL DATA ...
   echo  ... !!! BE Careful !!! ...
   exit 3
 fi

Проверить наличие нужного диска можно проще:

BACKUP_DISK=/dev/disk/by-id/usb-Easy_Disk_AA040127_007375-0:0
if [ ! -b $BACKUP_DISK ]; then
echo Correct backup disk not found: $BACKUP_DISK 2
exit 1
fi

-- 
WBR, Andrey Tataranovich


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/20130822124325.gc12...@tataranovich-pc.local.aitoc.com



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

2013-08-22 Пенетрантность Владимир Скубриев

On 22.08.2013 16:43, Andrey Tataranovich wrote:

14:35 Thu 22 Aug, Владимир Скубриев wrote:

TO=/dev/sdb
SERIAL=RTF57NGH
TO_DISK_INFO=`udevadm info --query=all -n $TO`

echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
# проверяем результат последней команды
if [ $? -ne 0 ];
then
   echo  Parametr SERIALTO do not correspond hard drive TO -
Exiting, beacuse we cannot delete ALL DATA ...
   echo  ... !!! BE Careful !!! ...
   exit 3
fi

Проверить наличие нужного диска можно проще:

BACKUP_DISK=/dev/disk/by-id/usb-Easy_Disk_AA040127_007375-0:0
if [ ! -b $BACKUP_DISK ]; then
echo Correct backup disk not found: $BACKUP_DISK 2
exit 1
fi


Я стремился к универсальности, вот:

#!/bin/bash

FROM=$1
TO=$2
SERIALTO=$3

TO_DISK_INFO=`udevadm info --query=all -n $TO`

if [ ! $# == 3 ]; then
  echo Usage: FROM TO SERIALNUMBER_OF_DISK_TO
  exit 1
fi

if [[ ! -b $2 ]] || [[ ! -b $1 ]]; then
  echo First | Second parametr is not a valid Block device
  exit 2
fi

echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
if [ $? -ne 0 ]; then
  echo  Parametr SERIALTO do not correspond hard drive TO - 
Exiting, beacuse we cannot delete ALL DATA ...

  exit 3
fi

echo $TO_DISK_INFO | grep ID_BUS | grep -qi usb
if [ $? -ne 0 ]; then
  echo  This disk is not USB Backup Disk - Exiting, beacuse we cannot 
delete ALL DATA ...

  exit 4
fi




--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/521609d8.2020...@skubriev.ru



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

2013-08-22 Пенетрантность Sergey Korobitsin
Peter Pentchev ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 14:12 
+0300

 
 [ ... ]

 Так что:
 
 if echo $TO_DISK_INFO | fgrep -e $SERIAL_SHORT | fgrep -qe $SERIALTO; 
 then
   ...
 fi

Это всё, конечно, хорошо, но человек хотел, чтобы блок внутри if ... fi
выполнился, если grep выполнится _неуспешно_. Простого способа, как это
сделать, я сходу не нашел, если только не городить что-то типа:

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

что, согласитесь, не очень читабельно.

-- 
Bright regards, Sergey Korobitsin,
Chief Research Officer
Arta Software, http://arta.kz/
xmpp:underta...@jabber.arta.kz


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/20130822134346.ga2...@undertaker.dev.lan.arta.kz



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

2013-08-22 Пенетрантность Владимир Скубриев

On 22.08.2013 17:43, Sergey Korobitsin wrote:

Peter Pentchev ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 14:12 
+0300


[ ... ]

Так что:

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

этот способ не подходит - верно.

Это всё, конечно, хорошо, но человек хотел, чтобы блок внутри if ... fi
выполнился, если grep выполнится _неуспешно_. Простого способа, как это
сделать, я сходу не нашел, если только не городить что-то типа:

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

что, согласитесь, не очень читабельно.


а что значит || true ?

--
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru



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

2013-08-22 Пенетрантность Sergey Korobitsin
Владимир Скубриев ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 
17:47 +0400

 On 22.08.2013 17:43, Sergey Korobitsin wrote:
 if echo $TO_DISK_INFO | fgrep -e $SERIAL_SHORT | fgrep -qe $SERIALTO 
 || true; then
  ...
 fi
 
 что, согласитесь, не очень читабельно.
 
 а что значит || true ?

Оно ещё и не работает как надо :-(

из man bash:
---
ИЛИ-список имеет вид

 команда || команда2
Команда2 выполняется только и если только команда вернула
ненулевой 
---

-- 
Bright regards, Sergey Korobitsin,
Chief Research Officer
Arta Software, http://arta.kz/
xmpp:underta...@jabber.arta.kz

--
Если мысли сходятся - значит, они ограничены
  -- Саша  Наташа, периодически


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/20130822140207.gc2...@undertaker.dev.lan.arta.kz



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

2013-08-22 Пенетрантность Peter Pentchev
On Thu, Aug 22, 2013 at 07:43:46PM +0600, Sergey Korobitsin wrote:
 Peter Pentchev ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 
 14:12 +0300
 
  
  [ ... ]
 
  Так что:
  
  if echo $TO_DISK_INFO | fgrep -e $SERIAL_SHORT | fgrep -qe $SERIALTO; 
  then
  ...
  fi
 
 Это всё, конечно, хорошо, но человек хотел, чтобы блок внутри if ... fi
 выполнился, если grep выполнится _неуспешно_. Простого способа, как это
 сделать, я сходу не нашел, если только не городить что-то типа:
 
 if echo $TO_DISK_INFO | fgrep -e $SERIAL_SHORT | fgrep -qe $SERIALTO || 
 true; then
   ...
 fi
 
 что, согласитесь, не очень читабельно.

Да... ошибка моя.  Я-то забыл, что он хочет отрицание.

Ну, if умеет отрицание:

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

В точности то, для чего создана the reserved word !.  Из dash(1):

  If the reserved word ! does not precede the pipeline, the exit status
  is the exit status of the last com‐ mand specified in the pipeline.
  Otherwise, the exit status is the logical NOT of the exit status of the
  last command.  That is, if the last command returns zero, the exit
  status is 1; if the last command returns greater than zero, the exit
  status is zero.

Или из bash(1):

  The return status of a pipeline is the exit status of the last
  command, unless the pipefail  option  is enabled.   If  pipefail  is
  enabled, the pipeline's return status is the value of the last
  (rightmost) command to exit with a non-zero status, or zero if all
  commands exit  successfully.   If  the  reserved word  !  precedes a
  pipeline, the exit status of that pipeline is the logical negation of
  the exit sta‐ tus as described above.  The shell waits for all
  commands in the pipeline to terminate before returning a value.

Так что if ! echo ... ; then ... сделает нужное.

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

-- 
Peter Pentchev  r...@ringlet.net r...@freebsd.org p.penc...@storpool.com
PGP key:http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint 2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13
This sentence no verb.


signature.asc
Description: Digital signature


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

2013-08-22 Пенетрантность Sergey Korobitsin
Peter Pentchev ☫ → To Debian-russian@lists.debian.org @ Thu, Aug 22, 2013 17:10 
+0300

 On Thu, Aug 22, 2013 at 07:43:46PM +0600, Sergey Korobitsin wrote:

 Ну, if умеет отрицание:
 
 if ! echo $TO_DISK_INFO | fgrep -e $SERIAL_SHORT | fgrep -qe $SERIALTO; 
 then
   ...
 fi
 
 В точности то, для чего создана the reserved word !.  Из dash(1):
 
   If the reserved word ! does not precede the pipeline, the exit status
   is the exit status of the last com‐ mand specified in the pipeline.
   Otherwise, the exit status is the logical NOT of the exit status of the
   last command.  That is, if the last command returns zero, the exit
   status is 1; if the last command returns greater than zero, the exit
   status is zero.
 
 Или из bash(1):
 
   The return status of a pipeline is the exit status of the last
   command, unless the pipefail  option  is enabled.   If  pipefail  is
   enabled, the pipeline's return status is the value of the last
   (rightmost) command to exit with a non-zero status, or zero if all
   commands exit  successfully.   If  the  reserved word  !  precedes a
   pipeline, the exit status of that pipeline is the logical negation of
   the exit sta‐ tus as described above.  The shell waits for all
   commands in the pipeline to terminate before returning a value.
 
 Так что if ! echo ... ; then ... сделает нужное.

Да, надо читать маны :-(. Я почему-то решил, что оно будет относиться к
первой команде в пайпе. А вообще, лучше perl взять, там unless есть :-).

-- 
Bright regards, Sergey Korobitsin,
Chief Research Officer
Arta Software, http://arta.kz/
xmpp:underta...@jabber.arta.kz

--
Если мысли сходятся - значит, они ограничены
  -- Саша  Наташа, периодически


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/20130822143131.gd2...@undertaker.dev.lan.arta.kz



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

2013-08-22 Пенетрантность Andrey Melnikoff
Владимир Скубриев vladi...@skubriev.ru wrote:
 On 22.08.2013 14:28, Sergey Korobitsin wrote:
  Владимир Скубриев ??? ??? To Debian-russian@lists.debian.org @ Thu, Aug 22, 
  2013 14:23 +0400

[skipp]

 TO=/dev/sdb
 SERIAL=RTF57NGH
 TO_DISK_INFO=`udevadm info --query=all -n $TO`

 echo $TO_DISK_INFO | grep SERIAL_SHORT | grep -q $SERIALTO
 # проверяем результат последней команды
 if [ $? -ne 0 ];
 then
echo  Parametr SERIALTO do not correspond hard drive TO - 
 Exiting, beacuse we cannot delete ALL DATA ...
echo  ... !!! BE Careful !!! ...
exit 3
 fi

Любите вы всё усложнять на пустом месте. пайпов вагон, зачем?

#/bin/sh

TO=/dev/sdb
SERIAL=RTF57NGH

if [ $(udevadm info --query=all -n ${TO} | grep -c SERIAL_SHORT=${SERIAL}) 
!= 1 ]; then
   echo blah-blah
fi

ы?


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/g3khea-ng@woofie.cef.spbstu.ru



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

2013-08-22 Пенетрантность Artem Chuprina
Sergey Korobitsin - debian-russian@lists.debian.org  @ Thu, 22 Aug 2013 
20:31:31 +0600:

  Ну, if умеет отрицание:
  
  if ! echo $TO_DISK_INFO | fgrep -e $SERIAL_SHORT | fgrep -qe 
  $SERIALTO; then
  ...
  fi
  

[...]

  
  Так что if ! echo ... ; then ... сделает нужное.

 SK Да, надо читать маны :-(. Я почему-то решил, что оно будет относиться к
 SK первой команде в пайпе. А вообще, лучше perl взять, там unless есть :-).

Еще можно написать

if command
then
:
else
содержательный текст
fi

sh-совместимо, кстати.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/87wqndsb5w@wizzle.ran.pp.ru