Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Конструкция проверки файла if [ -e file ]  (Прочитано 989 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Monkm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Здравствуйте! У меня установлена ubuntu 16.04.1 desktop x64 в эмуляторе VMware Workstation. Пытаюсь написать сценарий bash-скрипт. Почему-то у меня в конструкции if [ -e '.' ] даже пустая строка определяется как существующий и даже как ненулевой размер файла(с ключом -s). С чем это связано?

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3276
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #1 : 17 Январь 2017, 17:50:59 »
Пару подсказок:
1) все есть файл
2) . - текщая директория. смотрим п. 1
3) А на счет пустой строки это шутка?
Если вам нужен именно файл, то ключик -f
http://www.tldp.org/LDP/abs/html/fto.html
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #2 : 17 Январь 2017, 18:06:23 »
в конструкции if [ -e '.' ] даже пустая строка
Где тут «пустая строка», если
. - текущая директория
и конечно она не пустая, т.к. содержит как минимум 2 ссылки (на себя и родительскую директорию)?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3276
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #3 : 17 Январь 2017, 18:26:38 »

Где тут «пустая строка», если
Это к:
даже пустая строка определяется как существующий и даже как ненулевой размер файла
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн Monkm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #4 : 17 Январь 2017, 18:46:37 »
да действительно с точкой разобрался. Но на самом деле я запутался из-за пустой строки. У меня вообще сначала идет поиск командой find и почему-то результат этой команды никак не может быть корректно обработан. Сейчас попробовал вот такую конструкцию if [ -n $file -a -s $file ] - вроде как бы работает, но пишет ошибку "[: -a: unexpected operator". Как правильно написать? :)

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3276
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #5 : 17 Январь 2017, 18:53:28 »
Monkm, давайте начнем с условия задачи. а то непонятно вообще что вы ищете и что хотите найти
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4309
  • Capture the truth
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #6 : 17 Январь 2017, 19:01:13 »
if [ -n $file ] && [ -s $file ]
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн Monkm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #7 : 17 Январь 2017, 19:06:16 »
Кажется нашел решение. Оказывается для правильной работы ключа "-n" в конструкции условиях, нужно заключать в кавычки, даже переменные. Ключ -s я так понял не может адекватно обрабатывать пустую переменную. В общем вот такая конструкция вроде работает:
file=$(busybox find $PWD -type f -name '*file*' | $bb tail -1)
if [ -n "$file" -a -s $file ]
then

fi

зы: этот форум заставит насильно знать все загадки и фольклор. А еще вводить правильно код с картинки...

Пользователь добавил сообщение 17 Январь 2017, 19:13:45:
ALiEN175, Этот вариант пробовал, он не работал. Но вот так работает:
if [ -n "$file" ] && [ -s $file ]
Всем спасибо за ответы!

зы: а еще это форум научит писать любые числа прописью...
« Последнее редактирование: 17 Январь 2017, 19:28:18 от Monkm »

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3276
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #8 : 17 Январь 2017, 19:38:22 »
Monkm, а теперь еще раз - что вы хотите вообще сделать?
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #9 : 17 Январь 2017, 19:47:30 »
файл размер ноль байт.
это [ -s file ]
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4309
  • Capture the truth
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #10 : 17 Январь 2017, 20:08:00 »
Monkm, кавычки нужны, потому что у вас в переменной неэкранированные пробелы
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #11 : 18 Январь 2017, 00:20:11 »
(Нажмите, чтобы показать/скрыть)
Вместо:
Код: Bash
  1. if [ -n "$file" -a -s $file ]

просто:
Код: Bash
  1. if [ -s "$file" ]
« Последнее редактирование: 18 Январь 2017, 00:22:49 от renzrv »

 

Страница сгенерирована за 0.174 секунд. Запросов: 24.