Pull to refresh

Comments 43

Ух ты=) у меня как раз сейчас лабораторная — надо написать небольшую базу данных… ограничений по языку нет, что мне скажет преподаватель на БД на Баше?
Скорее всего «Я тоже читаю хабру — не ленитесь сделать сами лабораторную!»
на powershell напишите
За что народ минусует, интересно?
Хм. Если препод понимающий, то, думаю, оценит)
У меня только базовые возможности, думаю если написать «нормальную» реляционную базу, будет очень жестоко)
Жестоко по отношению к кому?
Если вы написали ЭТО for fun, то оно вам в удовольствие.
Жестоко к преподу. Согласитесь, баш далеко не удобочитаемый язык, а база данных на нем..)
Даже не так синтаксис, а учитывая использование разных утилит, у каждой из которых свой синтаксис, регекспы и т.д.
Нуу мне кажется если человек — юниксоид — то нет проблем, в противном случае — вынос мозга обеспечен %)
Э… Оно журнал ведёт? Репликация есть? Кластер?
Спасибо!!!
Как раз для домашних/бытовых потребностей нужно было что-то подобное.
неужели sqlite3 для вас было сильно круто? :D
p.s.
еще прикольно писать на баше свой интерактивный шелл.
я сейчас, 5 минут...
«Команда», какая комманда, вы что?
Пофиксил, спасибо.
Хм, на английском я это слово чаще пишу)
Когда то пытался написать что то подобное для простенького биллинга. Посмотрим может получится использовать ваши наработки. Если конечно вы не против? =Р
не пишите биллинг на баше, пожалуйста )
Я-то не против)
Но может для биллинга что-то посерьезнее чем база-на-коленке?
Это скорее разминка для ума, чем что то для продакшена.
Вы, конечно, молодец. Попробую ваш скрипт.
А чем не угодил SQLite?
Да угодил, просто хотелось чего-то простого. И самописного. И поиграться)
ошибки в примерах статьи

Комманда insert:
./tbdb.sh DBFile field1 field2 field3
должна быть
./tbdb.sh DBFile insert field1 field2 field3

Комманда delete:
./tbdb.sh DBFile line 2
должна быть:
./tbdb.sh DBFile delete line 2

— ошибки при выполнении скрипта:

$ bash --version
GNU bash, Version 4.1.5(1)-release (x86_64-pc-linux-gnu)

$ ./tbdb.sh L insert 22 hal;
./tbdb.sh: Zeile 190: =: Kommando nicht gefunden.
./tbdb.sh: Zeile 192: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 192: [: -eq: Einstelliger (unärer) Operator erwartet.
$ cat L
22 hal
$ ./tbdb.sh L -n select 1 line 1
./tbdb.sh: Zeile 55: [: ==: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 79: [: -eq: Einstelliger (unärer) Operator erwartet.
22
./tbdb.sh: Zeile 188: [: ==: Einstelliger (unärer) Operator erwartet.
./tbdb.sh: Zeile 206: [: ==: Einstelliger (unärer) Operator erwartet.
$ # не хватает номеров строки
$ ./tbdb.sh L delete line 1
cat: testfile: No such file or directory
$ cat L

дальше не ковырял
Мозг плохо варит уже. Пофиксил…
я обычно так определяю имя файла
echo "Usage: `basename $0` DBFILE.txt select.."
Индексы есть? Данные с пробелами и кавычками внутри поддерживаются? Ошибки записи обрабатываются?

Код кстати абсолютно нечитабелен.
Индексы есть?
Индексы это номера строк. Грубо говоря)

Данные с пробелами и кавычками внутри поддерживаются?
Для этого есть поддержка base64

Ошибки записи обрабатываются?
Нет

Код кстати абсолютно нечитабелен.
Согласен
код хорошо подсвечен, не надо тут ляля!
Вы бы ещё спросили про транзакции и хранимые процедуры, шутник.
Круто!

Кроме шуток, идея реально же оригинальная.
Если проверить Яндексом запрос типа «sql bash», то ничего умного по этой теме не найдём, только весёлое:

«кто-нибудь знает как загнать значение переменную, получено из командной строки в базу SQL»
«Кто нибудь знает как запихнуть в беш скрипт sql запрос»
Даешь ядро на баше! И хардварный интепретатор!
Бенчмарки есть? Поддержка update планируется? Как обстоят дела с нативной версией под виндоус, порт будет? Безумные программисты заинтересованы в подобных проектах!
if [ $1 == "delete" ]; then
shift;
if [ $1 == "line" ]; then
shift;
cat -n $db | grep "^ *${1}" | sed "s/^ *${1}\t//" > /tmp/dbdelete
diff $db /tmp/dbdelete | grep "^<" | sed "s/< //" > /tmp/dbdelete2
cp /tmp/dbdelete2 $db
fi
fi


Аффтар, ну разве так можно… :(. Прочитайте хотя бы просто несколько байт из /dev/random и добавьте к имени файла. Представьте, что будет, если несколько человек на сервере будут использовать Вашу БД одновременно :). А лучше вообще найти способ как-то блокировать файл базы данных, чтобы к нему не было параллельных обращений.
Привет!

Делал нечто подобное тоже в shell bash
привожу дамп pipiska.db:

1|MTIzCg==
2|MzIxCg==
и тд

Индексы строго предопределены, так как по ним велась выборка данных из бд.
Но таки потом стало ясно, охватил кучу минусов в работе, уж лучше SQLite или MySQL(предпочтительней)

Мы не одни :)

А хде update?? Delete+Insert не спортивно…
Sign up to leave a comment.

Articles