Перестал работать скрипт (Ругается на условие с if)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Перестал работать скрипт

Сообщение AlexYeCu »

Скрипт:

Код: Выделить всё

#!/bin/bash
echo "============================"
aha=` hcitool scan | grep AlexYeCu `
#echo $aha
if [[ $aha != "" ]]
then
echo "смартфон обнаружен"
 cd /media/N73
 if [[ -ed "C:" ]]
 then
 echo "размонтирую Nokia N73…"
 cd /
 $(sudo umount /media/N73)
 else
 echo "монтирую Nokia N73…"
 obexfs -b00:XX:XX:XX:XX:XX -B11 /media/N73
 fi
else
echo "смартфон НЕ обнаружен"
fi
cd /media/N73
if [[ -ed "C:" ]]
 then
 echo "смартфон смонтирован"
 else
 echo "смартфон размонтирован"
fi
echo "============================"
exit 0


Ошибка:

Код: Выделить всё

~/bin/N73: line 9: conditional binary operator expected
~/bin/N73: line 9: ошибка синтаксиса около `"C:"'
~/bin/N73: line 9: ` if [[ -ed "C:" ]]'


Как исправить? В F10 работал, в F12 видно что-то поменялось…
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Перестал работать скрипт

Сообщение sgfault »

А что вы проверяете с помощью -ed? Существование и что директория? Но это ведь можно сделать и с помощью одного -d.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Перестал работать скрипт

Сообщение t.t »

AlexYeCu писал(а):
25.02.2010 15:26
Ошибка:

Код: Выделить всё

~/bin/N73: line 9: conditional binary operator expected
~/bin/N73: line 9: ошибка синтаксиса около `"C:"'
~/bin/N73: line 9: ` if [[ -ed "C:" ]]'


Как исправить? В F10 работал, в F12 видно что-то поменялось…
Признаться, не совсем понятно, как оно могло работать. Может быть, там всё-таки было [...], а не [[...]]?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Перестал работать скрипт

Сообщение drBatty »

t.t писал(а):
25.02.2010 16:04
Признаться, не совсем понятно, как оно могло работать. Может быть, там всё-таки было [...], а не [[...]]?

вот и я не понимаю - может там была ссылка [ --> [[ ?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Перестал работать скрипт

Сообщение diesel »

drBatty писал(а):
25.02.2010 16:14
t.t писал(а):
25.02.2010 16:04
Признаться, не совсем понятно, как оно могло работать. Может быть, там всё-таки было [...], а не [[...]]?

вот и я не понимаю - может там была ссылка [ --> [[ ?

а в bash или test разве где-то есть -ed?

Код: Выделить всё

diesel@:/tmp$ if [[ -ed 'C:' ]]; then echo ok; fi
bash: conditional binary operator expected
bash: syntax error near `'C:''
diesel@:/tmp$ if [ -ed 'C:' ]; then echo ok; fi
bash: [: -ed: unary operator expected
diesel@:/tmp$ if test -ed 'C:'; then echo ok; fi
bash: test: -ed: unary operator expected


не должно быть особой разницы между [ и [[
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Перестал работать скрипт

Сообщение sgfault »

drBatty писал(а):
25.02.2010 16:14
t.t писал(а):
25.02.2010 16:04
Признаться, не совсем понятно, как оно могло работать. Может быть, там всё-таки было [...], а не [[...]]?

вот и я не понимаю - может там была ссылка [ --> [[ ?

А что -ed работает с [?
Ведь, если я правильно понимаю, это проверка существование файла и что файл директория, но, если даже не учитывать, что -е тут лишний (или все же нет?), оно все равно не работает (у меня по крайней мере).

Код: Выделить всё

bash-4.0# ( if [ -ed "./firefox" ]; then echo URA; fi )
bash: [: -ed: unary operator expected

Код: Выделить всё

bash-4.0# bash --version
GNU bash, version 4.0.0(2)-release (i486-slackware-linux-gnu)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Перестал работать скрипт

Сообщение drBatty »

sgfault писал(а):
25.02.2010 16:32
А что -ed работает с [?

нет. но можно так:

Код: Выделить всё

$ [ -e .bashrc -a -d .bashrc ]; echo $?
1


PS: и так:

Код: Выделить всё

$ [ -ed  ]; echo $?
0

(удивлённо...)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Re: Перестал работать скрипт

Сообщение AlexYeCu »

t.t писал(а):
25.02.2010 16:04
Признаться, не совсем понятно, как оно могло работать. Может быть, там всё-таки было [...], а не [[...]]?


С [] будет так:

Код: Выделить всё

смартфон обнаружен
~/bin/N73_b: line 9: [: -ed: ожидается использование унарного оператора
монтирую Nokia N73…
~/bin/N73_b: line 22: [: -ed: ожидается использование унарного оператора
смартфон размонтирован



Всё, как в первоначальном варианте, e и правда лишняя, убираю — всё ок. Что раньше работало — 100%.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Перестал работать скрипт

Сообщение sgfault »

drBatty писал(а):
25.02.2010 16:40
sgfault писал(а):
25.02.2010 16:32
А что -ed работает с [?

нет. но можно так:

Код: Выделить всё

$ [ -e .bashrc -a -d .bashrc ]; echo $?
1


Ну, если начать изменять, то и с [[ исправить можно :-)

Код: Выделить всё

bash-4.0# ( if [[ -e "./firefox" && -d "./firefox" ]]; then echo URA; fi )
URA


UPD
на следующий пост:
/dev/random писал(а):
25.02.2010 23:44
-d автоматически подразумевает -e.

вообще-то, это был пример не того, как "надо" делать, а всего лишь ответ на предыдущий пост.. ну да неважно. А про '-e': тут по-моему вся тема состоит из того, что одна и та же мысль - "-e лишнее" - повторяется разными людьми :-)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Перестал работать скрипт

Сообщение /dev/random »

sgfault писал(а):
25.02.2010 16:51

Код: Выделить всё

bash-4.0# ( if [[ -e "./firefox" && -d "./firefox" ]]; then echo URA; fi )
URA

if [[ -d "./firefox" ]]; then

-d автоматически подразумевает -e.
Спасибо сказали:
smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Перестал работать скрипт

Сообщение smaharbA »

может раньше было так ?

Код: Выделить всё

#!/bin/csh

if ( -ed "/bin" ) then
    echo ok;
endif
Я конечно далек от мысли...(с)
Спасибо сказали: