Unix csh (в упор не понимаю как написать if...)

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

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

Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Unix csh

Сообщение tmp13 »

Вообщем есть задача написать тупо проверку существования файла через csh
к сожаление пока не знаю как надо будет через -e или ls. До чего я дошёл:
Файл listall.in точно существует.
1.

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

#!/bin/csh
set checkfile=listallasdf.in
echo $checkfile
if ( ! -e $checkfile) then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif

выполняем получаем:
listallasdf.in
listallasdf.in - ну а что его просто нет
else: endif not found.

else: endif not found. - ?? а почему??
2.

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

#!/bin/csh
set checkfile=listall.in
echo $checkfile
if ( ! -e $checkfile) then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif

получаем:
listall.in
0: Event not found.

вики:
http://en.wikipedia.org/wiki/C_shell
The implementation is also criticized for its notoriously poor error messages, e.g., "0 event not found", which yields no information about what the problem is.
- смутно понял что тут написанно(

3.

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

#!/bin/csh
set check=listall.in
set checkfile=`ls listall.in`
echo $checkfile
if ($checkfile == "") then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif

ответ
listall.in
0: Event not found.


4.

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

#!/bin/csh
set check=listall.in
set checkfile=`ls listallsdfs.in`
echo $checkfile
if ($checkfile == "") then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif

ответ:
listallsdfs.in not found
- ну а что его просто нет
else: endif not found.


вообщем смотрю и думаю чёт всё не так как то....(
не понимаю что я делаю не так?
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Unix csh

Сообщение ZyX »

tmp13 писал(а):
18.06.2010 18:24
Вообщем есть задача написать тупо проверку существования файла через csh
к сожаление пока не знаю как надо будет через -e или ls. До чего я дошёл:
Файл listall.in точно существует.
1.

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

#!/bin/csh
set checkfile=listallasdf.in
echo $checkfile
if ( ! -e $checkfile) then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif

выполняем получаем:
listallasdf.in
listallasdf.in - ну а что его просто нет
else: endif not found.

else: endif not found. - ?? а почему??
2.

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

#!/bin/csh
set checkfile=listall.in
echo $checkfile
if ( ! -e $checkfile) then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif

получаем:
listall.in
0: Event not found.

вики:

Вы не экранируете восклицательные знаки. Схожая проблема была бы в zsh.

+ У вас опечатка: в слове «доказано» только одна буква «н»;
+ после «доказано» не хватает двоеточия;
+ после «что» не хватает двоеточия.
Короче, csh мягко намекает, что надо бы почитать Розенталя.
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Unix csh

Сообщение tmp13 »

не очень понял про экранирование... ну предположим я что-то найду по этому поводу...
тогда что

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

#!/bin/csh
set check=listall.in
set checkfile=`ls listall.in`
echo $checkfile
if ($checkfile == "") then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif
- тут не так?

P.S ни времени ни сил читать бред типа Розентеля или подобный.
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Unix csh

Сообщение ZyX »

tmp13 писал(а):
21.06.2010 16:44
не очень понял про экранирование... ну предположим я что-то найду по этому поводу...
тогда что

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

#!/bin/csh
set check=listall.in
set checkfile=`ls listall.in`
echo $checkfile
if ($checkfile == "") then
  echo "$checkfile - ну а что его просто нет"
else
  echo "$checkfile - доказанно оно существует!!"
endif
- тут не так?

P.S ни времени ни сил читать бред типа Розентеля или подобный.

Внутри двойных кавычек восклицательный знак надо экранировать. Попробуйте такой простой пример:

zyx@zyx-desktop

(zyx:~) % csh -c 'echo "!!"' 0: Event not found. (zyx:~) % csh -c 'echo "\!\!"' !!


PS: Розенталь это не бред.
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Unix csh

Сообщение tmp13 »

тогда что
#!/bin/csh
set check=listall.in
set checkfile=`ls listall.in`
echo $checkfile
if ($checkfile == "") then
echo "$checkfile - ну а что его просто нет"
else
echo "$checkfile - доказанно оно существует!!"
endif - тут не так?

вообщем как выяснилось в csh строки сравнивать не так просто.

всем спасибо=)

P.S не читал спорить не буду=) мб там великая мысль=)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Unix csh

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

Начнём с того, что не очень понятно, зачем Вам сравнивать строки?

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

[ -e "$check" ] && echo found || echo oops

Кроме того, переменные внутри if тоже экранировать нужно (в кавычки брать), чтобы при пустых значениях ошибки синтаксиса не было.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: