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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн Monkm

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

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.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
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Azure

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

Оффлайн EvangelionDeath

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

Где тут «пустая строка», если
Это к:
даже пустая строка определяется как существующий и даже как ненулевой размер файла
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Monkm

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

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #5 : 17 Января 2017, 18:53:28 »
Monkm, давайте начнем с условия задачи. а то непонятно вообще что вы ищете и что хотите найти
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6733
  • 20% Cooler
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #6 : 17 Января 2017, 19:01:13 »
if [ -n $file ] && [ -s $file ]
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: 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

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #8 : 17 Января 2017, 19:38:22 »
Monkm, а теперь еще раз - что вы хотите вообще сделать?
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн victor00000

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

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6733
  • 20% Cooler
    • Просмотр профиля
Re: Конструкция проверки файла if [ -e file ]
« Ответ #10 : 17 Января 2017, 20:08:00 »
Monkm, кавычки нужны, потому что у вас в переменной неэкранированные пробелы
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн ReNzRv

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

 

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