Модераторы: powerfox, ZeeLax

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> простая задача на языке bash 
V
    Опции темы
An123
  Дата 17.10.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 17.10.2009

Репутация: нет
Всего: нет



Разработать сценарий для поддержки базы данных входящих документов 
Документ представлен некоторым текстовым файлом. База данных - это отдельный каталог, в котором размещаются документы. Требуется
-добавить документ в базу
-просмотреть список документов
-отобразить содержимое документов
-получить объём в байтах документа
Работа с системой с помощью меню и задании параметров, необходимых для выполнения соотв. действия. После выполнения действия пользователю опять предлагается выыбрать один из пунктов меню
Завершение работы осуществляется посредством выбора Выход

Bash я начал изучать недавно(точнее вчера) и получилось что то вроде этого - некоторые пункты совсем не реализованы:
Код

#!/bin/bash 
VHOD() 
{ 
echo Введите путь к каталогу 
read FOLDER 
cd $FOLDER 
#cd /home/an/lab2 
echo Список документов в выбранном каталоге: 
ls 
} 
VHOD 
OPEN() 
{ 
count=0 
echo Введите имя файла: 
read INPUT 
until [ -e $INPUT ] 
do 
echo неверный ввод, введите заново 
read INPUT 
done 
cat $INPUT 
count=$(($count+1)) 
echo $count>/home/an/lab2/count/$INPUT 
#a=$cat(<файл>); (( a++ )); echo $a > <файл> 
} 
INFO() 
{ 
echo Введите имя файла информацию о котором хотите узнать: 
read INPUT 
until [ -s /home/an/lab2/count/$INPUT ] 
do 
echo неверный ввод, введите заново 
read INPUT 
done 

} 
PS3="Выберите пункт меню:" 
select ITEM in "Открыть файл" "Добавить документ в базу" "Получить объем в байтах" Выход 
do 
case $ITEM in 
"Открыть файл") OPEN;
Выход) break;; 
esac 
done

PM MAIL   Вверх
spin2
Дата 17.10.2009, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

Репутация: 5
Всего: 31



А в чем вопрос?


--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
An123
Дата 17.10.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 17.10.2009

Репутация: нет
Всего: нет



Вопрос в том как организовать это    -отобразить содержимое документов
-получить объём в байтах документа
PM MAIL   Вверх
powerfox
Дата 17.10.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 26
Всего: 97



Цитата(An123 @  17.10.2009,  22:31 Найти цитируемый пост)
-отобразить содержимое документов

cat somefilename


Цитата(An123 @  17.10.2009,  22:31 Найти цитируемый пост)
-получить объём в байтах документа 

Это сложнее. Что именно нужно: сколько занимает вообще, или сколько занимает на диске?
Если на диске, то можно использовать du. Тогда нужно либо парсить вывод, полученный с помощью "-h", либо думать о размере блока (без "-h" выдаётся размер в блоках).
Если объём данных, то "wc -c somefile".


--------------------
user posted image
PM WWW   Вверх
spin2
Дата 17.10.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

Репутация: 5
Всего: 31



powerfox, для файла и ls -l и потом cut вполне хватит, по-моему.


--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
An123
Дата 18.10.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 17.10.2009

Репутация: нет
Всего: нет



Необходимо получить объём (в байтах) заданного документа
А про cat somefilename можно поподробнее
PM MAIL   Вверх
cutwater
Дата 18.10.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: нет
Всего: 10



Подробнее в
Код

man cat



--------------------
user posted image
PM MAIL   Вверх
powerfox
Дата 18.10.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 26
Всего: 97



Цитата(An123 @  18.10.2009,  11:49 Найти цитируемый пост)
Необходимо получить объём (в байтах) заданного документа

Выше я написал, как это сделать ;)

Цитата(spin2 @  18.10.2009,  00:16 Найти цитируемый пост)
powerfox, для файла и ls -l и потом cut вполне хватит, по-моему. 

Конечно.


--------------------
user posted image
PM WWW   Вверх
spin2
Дата 19.10.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

Репутация: 5
Всего: 31



An123, приведенный код тобой написан? Там же уже есть строчка
Цитата

cat $INPUT 



--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
An123
Дата 31.10.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 17.10.2009

Репутация: нет
Всего: нет



А как можно добавить документ в базу ?
PM MAIL   Вверх
BlackRu
Дата 31.10.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 14.9.2009

Репутация: 2
Всего: 4



Что-то я не могу понять, почему после выполнения первой функции мы в конце остаемся в стартовой директории. Т.е. пользовательского перехода не происходит.
Или нужно перекурить read? 
Извиняюсь за оффтоп. 

Это сообщение отредактировал(а) BlackRu - 31.10.2009, 13:10


--------------------
Удалена администрацией форума
PM MAIL WWW Skype   Вверх
BlackRu
Дата 31.10.2009, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 14.9.2009

Репутация: 2
Всего: 4



Код

#!/bin/bash 
VHOD() 
{ 
echo Введите путь к каталогу 
read FOLDER 
cd $FOLDER 
#cd /home/an/lab2 
echo Список документов в выбранном каталоге: 
ls 
} 
VHOD 

OPEN() 
{ 
count=0 
echo Введите имя файла: 
read INPUT 
until [ -e $INPUT ] 
do 
echo неверный ввод, введите заново 
read INPUT 
done 
cat $INPUT 
count=$(($count+1)) 
echo $count>/home/an/lab2/count/$INPUT 
#a=$cat(<файл>); (( a++ )); echo $a > <файл> 
} 
INFO() 
{ 
echo Введите имя файла информацию о котором хотите узнать: 
read INPUT 
ls -all $INPUT
} 


ADDD()
{
count=0
echo Введите файл:
read INPUT
touch $INPUT
}


PS3="Выберите пункт меню:" 

select ITEM in "Открыть файл" "Добавить документ в базу" "Получить объем в байтах" "Выход" 
do 

case $ITEM in 
"Открыть файл") OPEN;
esac 


case $ITEM in
"Добавить документ в базу") ADDD;
esac

case $ITEM in
"Получить объем в байтах") INFO;
esac

case $ITEM in
"Выход")
esac
break;
done

Оно?
Полный Брейк Данц в общем. 

Это сообщение отредактировал(а) BlackRu - 31.10.2009, 14:05


--------------------
Удалена администрацией форума
PM MAIL WWW Skype   Вверх
An123
Дата 31.10.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 17.10.2009

Репутация: нет
Всего: нет



BlackRu, спасибо большое
Только я не очень понял как происходит получение объёма в байтах
Если не сложно, ты не мог бы этот кусок пояснить :
Код

OPEN() 
{ 
count=0 
echo Введите имя файла: 
read INPUT 
until [ -e $INPUT ] 
do 
echo неверный ввод, введите заново 
read INPUT 
done 
cat $INPUT 
count=$(($count+1)) 
echo $count>/home/an/lab2/count/$INPUT 
#a=$cat(<файл>); (( a++ )); echo $a > <файл> 
} 
INFO() 
{ 
echo Введите имя файла информацию о котором хотите узнать: 
read INPUT 
ls -all $INPUT
} 

PM MAIL   Вверх
BlackRu
Дата 31.10.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 14.9.2009

Репутация: 2
Всего: 4



Код

OPEN() 
{ 
count=0 
echo Введите имя файла: 
read INPUT 
until [ -e $INPUT ] 
do 
echo неверный ввод, введите заново 
read INPUT 
done 
cat $INPUT 
count=$(($count+1)) 
echo $count>/home/an/lab2/count/$INPUT 
#a=$cat(<файл>); (( a++ )); echo $a > <файл> 
} 

Это твой кусок кода. Я не очень понимаю, почему так сделано. И кажется, он некорректно работает, каждый раз перезаписывая то ли, счетчик, то ли значение true в файл, у меня так во всяком случае. Мне кажется стоит выкинуть цикл, т.е. 
Код

OPEN() 
{ 
echo Введите имя файла: 
read INPUT 
cat $INPUT 
} 


Если нужно сделать проверку ввода, то лучше покурить насчет аналога file exist - такая фича есть в php, вероятно есть и в bash... что делает -e? - этот ключ/оператор/хз?  я не понял, поясни. 


Код

INFO() 
{ 
echo Введите имя файла информацию о котором хотите узнать: 
read INPUT 
ls -all $INPUT
} 

Эта функция, наскоро написанная, выводит информация о файле, там права на запись, время, размер и т.д. Если тебе надо отдельно вывести только байты, это можно сделать посредство конвеера, например использовать awk и grep, если они есть в системе, хотя есть команда size. Вариантов, много.    Но есть самый простой способ - использовать du

Код

INFO() 
{ 
echo Введите имя файла информацию о котором хотите узнать: 
read INPUT 
echo Размер  Имя файла; du $INPUT
} 


Или так.


Код

INFO() 
{ 
echo Введите имя файла информацию о котором хотите узнать: 
read INPUT 
ls -all $INPUT | awk  '{printf  $5}'; echo " "  байта
} 










Это сообщение отредактировал(а) BlackRu - 31.10.2009, 17:34


--------------------
Удалена администрацией форума
PM MAIL WWW Skype   Вверх
An123
Дата 31.10.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 17.10.2009

Репутация: нет
Всего: нет



Код

OPEN() 
{ 
count=0 
echo Введите имя файла: 
read INPUT 
until [ -e $INPUT ] 
do 
echo неверный ввод, введите заново 
read INPUT 
done 
cat $INPUT 
count=$(($count+1)) 
echo $count>/home/an/lab2/count/$INPUT 
#a=$cat(<файл>); (( a++ )); echo $a > <файл> 
} 

Вот эту часть позаимствовал - так что не исключено есть косяки
А вообще как правило требуется сделать  проверку ввода, если в задании об этом ничего не сказано?
Вот эта строка как работает 
Код

ls -all $INPUT | awk  '{printf  $5}'; echo " "  байта
 
5 - это что?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.