Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
Два файла объединены общим полем
CatalogПоследнее, что мы должны решить, — способ разделения элементов данных. Поля фиксированной ширины, обычные в реляционных базах, — не всегда самый удобный вариант. Другой распространенный способ, применяемый в данном примере, — запятая (т. е. файл со значениями, разделенными запятыми, или CSV-файл).
В упражнении 2.23 только для того, чтобы вы окончательно не запутались, применяются следующие функции:
□
get_return()□
get_confirm()□
set_menu_choice()□
insert_title()□
insert_track()□
add_record_tracks()□
add_records()□
find_cd()□
update_cd()□
count_cds()□
remove_records()□
list_tracks()1. Сначала в примере сценария как всегда стоит строка, обеспечивающая его выполнение как сценария командной оболочки, за которой следует некоторая информация об авторских правах:
#!/bin/bash# Очень простой пример сценария командной оболочки для управления# коллекцией компакт-дисков.# Copyright (С) 1996-2007 Wiley Publishing Inc.# Это свободно распространяемое программное обеспечение;# вы можете распространять эту программу и/или изменять ее# в соответствии с положениями GNU General Public License,# документа, опубликованного фондом Free Software Foundation;# либо версии 2 этой лицензии или (по вашему выбору)# любой более свежей версии.# Эта программа распространяется в надежде на ее полезность,# но WITHOUT ANY WARRANTY, (без каких-либо гарантий);# даже без предполагаемой гарантии MERCHANTABILITY# or FITNESS FOR A PARTICULAR PURPOSE (годности# ее для продажи или применения для определенной цели).# Более подробную информацию см. в GNU General Public License.# Вы должны были получить копию GNU General Public License# вместе с этой программой;# если нет, пишите в организацию Free Software Foundation,# Inc. no адресу: 675 Mass Ave, Cambridge, MA 02139, USA.2. Теперь убедитесь, что установлены некоторые глобальные переменные, которые будут использоваться во всем сценарии. Задайте заголовочный файл, файл с данными о дорожках и временный файл и перехватите нажатие комбинации клавиш <Ctrl>+<C> для того, чтобы удалить временный файл, если пользователь прервет выполнение сценария.
menu_choice=""current cd=""title_file="title.cdb"tracks_file="tracks.cdb"temp_file=/tmp/cdb.$$trap 'rm -f $temp_file' EXIT3. Определите ваши функции так, чтобы сценарий, выполняясь с первой строки, мог найти все определения функций до того, как вы попытаетесь вызвать любую из них в первый раз. Для того чтобы не повторять один и тот же программный код в нескольких местах, сначала вставьте две функции, служащие простыми утилитами:
get_return() ( echo -е "Press return с" read x return 0}get_confirm() ( echo -e "Are you sure? c" while true do read x case "$x" in y | yes | Y | Yes | YES ) return 0;; n | no | N | No | NO ) echo echo "Cancelled" return 1;; *) echo "Please enter yes or no" ;; esac done}4. Теперь вы дошли до основной, формирующей меню функции
set_menu_choiceset_menu_choice() { clear echo "Options :-" echo echo " a) Add new CD" echo " f) Find CD" echo " c) Count the CDs and tracks in the catalog" if [ "$cdcatnum" != "" ]; then echo " 1) List tracks on $cdtitle" echo " r) Remove $cdtitle" echo " u) Update track information for $cdtitle" fi echo " q) Quit" echo echo -e "Please enter choice then press return c" read menu_choice return}Имейте в виду, что команда
echo -е