Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

grep -v "^${cdcatnum}, " $title_file > $temp_file

mv $temp_file $title_file

grep -v "^${cdcatnum}, " $tracks_file > $temp_file

mv $temp_file $tracks_file

cdcatnum=""

echo Entry removed

}

get_return

 fi

 return

}

11. Функция

list_tracks
снова использует
команду
grep
для извлечения нужных вам строк, команду
cut
для доступа к отдельным полям и затем команду
more
для постраничного вывода. Если вы посмотрите, сколько строк на языке С займет повторная реализация этих 20 необычных строк кода, то поймете, каким мощным средством может быть командная оболочка.

list_tracks {

 if [ "$cdcatnum" = "" ]; then

echo no CD selected yet

return

 else

grep "^${cdcatnum}, " $tracks_file > $temp_file

num_tracks=${wc -l $temp_file}

if [ "$num_tracks" = "0" ]; then

echo no tracks found for $cdtitle

else

{

echo

echo "$cdtitle :-"

echo

cut -f 2- -d , $temp_file

echo

} | ${PAGER:-more}

fi

 fi

 get_return

 return

}

12. Теперь, когда все функции определены, можно вводить основную процедуру. Первые несколько строк просто приводят файлы в известное состояние; затем вы вызываете функцию формирования меню

set_menu_choice
и действуете в соответствии с ее выводом.

Если выбран вариант

quit
(завершение), вы удаляете временный файл, выводите сообщение и завершаете сценарий с успешным кодом завершения.

rm -f $temp_file

if [ !
– f $title_file ]; then

 touch $title_file

fi

if [ !
– f $tracks_file ]; then

 touch $tracks_file

fi

# Теперь непосредственно приложение

clear

echo

echo

echo "Mini CD manager" sleep 1

quit=n

while [ "$quit" != "y" ]; do

 set_menu_choice

 case "$menu_choice" in

a) add_records;;

r) remove records;;

f) find_cd y;;

u) update_cd;;

c) count_cds;;

l) list_tracks;;

b)

echo

more $title_file

echo

get return;;

q | Q ) quit=y;;

*) echo "Sorry, choice not recognized";;

 esac

done

#
Убираем и покидаем

rm -f $temp_file echo "Finished"

exit 0

Замечания, касающиеся приложения

Команда trap в начале сценария предназначена для перехвата нажатия пользователем комбинации клавиш <Ctrt>+<C>. Им может быть сигнал

EXIT
или
INT
, в зависимости от настроек терминала.

Существуют другие способы реализации выбора пункта меню, особенно конструкция

select
в оболочках bash и ksh (которая, тем не менее, не определена в стандарте X/Open). Она представляет собой специализированный селектор пунктов меню. Проверьте ее на практике, если ваш сценарий может позволить себе быть немного менее переносимым. Для передачи пользователям многострочной информации можно также воспользоваться встроенными документами.

Возможно, вы заметили, что нет проверки первичного ключа, когда создается новая запись; новый код просто игнорирует последующие названия с тем же кодом, но включает их дорожки в перечень первого названия:

1 First CD Track 1

2 First CD Track 2

1 Another CD

2 With the same CD key

Мы оставляем это и другие усовершенствования в расчете на ваше воображение и творческие способности, которые проявятся при корректировке вами программного кода в соответствии с требованиями GPL.

Резюме 

В этой главе вы увидели, что командная оболочка — это мощный язык программирования со своими функциональными возможностями. Ее способность легко вызывать программы и затем обрабатывать их результат делают оболочку идеальным средством для решения задач, включающих обработку текста и файлов.

Теперь, если вам понадобится небольшая утилита, подумайте, сможете ли вы решить вашу проблему, комбинируя множество команд ОС Linux в сценарии командной оболочки. Вы будете поражены, увидев, как много вспомогательных программ можно написать без использования компилятора. 

Глава 3

Работа с файлами

В этой главе будут рассматриваться файлы и каталоги ОС Linux и способы работы с ними. Вы научитесь создавать файлы, открывать и читать их, писать в них и удалять их. Вы также узнаете, как программы могут обрабатывать каталоги (например, создавать, просматривать и удалять их). После сделанного в предыдущей главе отступления, посвященного командным оболочкам, теперь вы начнете программировать на языке С.

Прежде чем перейти к способам обработки файлового ввода/вывода в системе Linux, мы дадим краткий обзор понятий, связанных с файлами, каталогами и устройствами. Для управления файлами и каталогами вам придется выполнять системные вызовы (аналог Windows API в системах UNIX и Linux), но, кроме того, для обеспечения более эффективного управления файлами существует большой набор библиотечных функций стандартной библиотеки ввода/вывода (stdio).

Поделиться:
Популярные книги

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Моров. Том 9

Кощеев Владимир
8. Моров
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Моров. Том 9

Кодекс Охотника. Книга XXXIV

Винокуров Юрий
34. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIV

Газлайтер. Том 19

Володин Григорий Григорьевич
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 19

Адвокат Империи 10

Карелин Сергей Витальевич
10. Адвокат империи
Фантастика:
городское фэнтези
аниме
дорама
попаданцы
5.00
рейтинг книги
Адвокат Империи 10

Как я строил магическую империю 9

Зубов Константин
9. Как я строил магическую империю
Фантастика:
постапокалипсис
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Как я строил магическую империю 9

Сильнейший Столп Империи. Книга 4

Ермоленков Алексей
4. Сильнейший Столп Империи
Фантастика:
фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 4

Технарь

Муравьёв Константин Николаевич
1. Технарь
Фантастика:
космическая фантастика
попаданцы
7.13
рейтинг книги
Технарь

Законы Рода. Том 6

Мельник Андрей
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Лидер с планеты Земля

Тимофеев Владимир
2. Потерявшийся
Фантастика:
боевая фантастика
космическая фантастика
6.00
рейтинг книги
Лидер с планеты Земля

ЖЛ. Том 6

Шелег Дмитрий Витальевич
6. Живой лед
Фантастика:
фэнтези
городское фэнтези
5.00
рейтинг книги
ЖЛ. Том 6

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан