Основы программирования в Linux
list_tracks() {if [ "$cdcatnum" = "" ]; thenecho no CD selected yetreturnelsegrep "^${cdcatnum}, " $tracks_file > $temp_filenum_tracks=${wc -l $temp_file}if [ "$num_tracks" = "0" ]; thenecho no tracks found for $cdtitleelse{echoecho "$cdtitle :-"echocut -f 2- -d , $temp_fileecho} | ${PAGER:-more}fifiget_returnreturn}12. Теперь, когда все функции определены, можно вводить основную процедуру. Первые несколько строк просто приводят файлы в известное состояние; затем вы вызываете функцию формирования меню
и действуете в соответствии с ее выводом.set_menu_choiceЕсли выбран вариант
(завершение), вы удаляете временный файл, выводите сообщение и завершаете сценарий с успешным кодом завершения.quitrm -f $temp_fileif [ ! -f $title_file ]; thentouch $title_filefiif [ ! -f $tracks_file ]; thentouch $tracks_filefi# Теперь непосредственно приложениеclearechoechoecho "Mini CD manager" sleep 1quit=nwhile [ "$quit" != "y" ]; doset_menu_choicecase "$menu_choice" ina) add_records;;r) remove records;;f) find_cd y;;u) update_cd;;c) count_cds;;l) list_tracks;;b)echomore $title_fileechoget return;;q | Q ) quit=y;;*) echo "Sorry, choice not recognized";;esacdone# Убираем и покидаемrm -f $temp_file echo "Finished"exit 0Замечания, касающиеся приложенияКоманда trap в начале сценария предназначена для перехвата нажатия пользователем комбинации клавиш <Ctrt>+<C>. Им может быть сигнал
илиEXIT, в зависимости от настроек терминала.INTСуществуют другие способы реализации выбора пункта меню, особенно конструкция
в оболочках bash и ksh (которая, тем не менее, не определена в стандарте X/Open). Она представляет собой специализированный селектор пунктов меню. Проверьте ее на практике, если ваш сценарий может позволить себе быть немного менее переносимым. Для передачи пользователям многострочной информации можно также воспользоваться встроенными документами.selectВозможно, вы заметили, что нет проверки первичного ключа, когда создается новая запись; новый код просто игнорирует последующие названия с тем же кодом, но включает их дорожки в перечень первого названия:
1 First CD Track 12 First CD Track 21 Another CD2 With the same CD keyМы оставляем это и другие усовершенствования в расчете на ваше воображение и творческие способности, которые проявятся при корректировке вами программного кода в соответствии с требованиями GPL.
Резюме
В этой главе вы увидели, что командная оболочка — это мощный язык программирования со своими функциональными возможностями. Ее способность легко вызывать программы и затем обрабатывать их результат делают оболочку идеальным средством для решения задач, включающих обработку текста и файлов.
Теперь, если вам понадобится небольшая утилита, подумайте, сможете ли вы решить вашу проблему, комбинируя множество команд ОС Linux в сценарии командной оболочки. Вы будете поражены, увидев, как много вспомогательных программ можно написать без использования компилятора.
Глава 3
Работа с файлами
В этой главе будут рассматриваться файлы и каталоги ОС Linux и способы работы с ними. Вы научитесь создавать файлы, открывать и читать их, писать в них и удалять их. Вы также узнаете, как программы могут обрабатывать каталоги (например, создавать, просматривать и удалять их). После сделанного в предыдущей главе отступления, посвященного командным оболочкам, теперь вы начнете программировать на языке С.
Прежде чем перейти к способам обработки файлового ввода/вывода в системе Linux, мы дадим краткий обзор понятий, связанных с файлами, каталогами и устройствами. Для управления файлами и каталогами вам придется выполнять системные вызовы (аналог Windows API в системах UNIX и Linux), но, кроме того, для обеспечения более эффективного управления файлами существует большой набор библиотечных функций стандартной библиотеки ввода/вывода (stdio).
Большую часть главы мы посвятим работе с различными вызовами, необходимыми для обработки файлов и каталогов. Таким образом, в данной главе будут обсуждаться разные темы, связанные с файлами:
□ файлы и устройства;
□ системные вызовы;
□ библиотечные функции;
□ низкоуровневый доступ к файлу;
□ управление файлами;
□ стандартная библиотека ввода/вывода;
□ форматированный ввод и вывод;
□ сопровождение файлов и каталогов;
□ просмотр каталогов;