Основы программирования в Linux
Часть 42 из 324 Информация о книге
return 0 ;;1) ;;2)echo "Sorry, not unique."echo "Found the following"cat $temp_fileget_returnreturn 0esacIFS=", "read cdcatnum cdtitle cdtype cdac < $temp_fileIFS=" "if [ -z "$cdcatnum" ]; thenecho "Sorry, could not extract catalog field from $temp_file"get_returnreturn 0fiechoecho Catalog number: $cdcatnum echo Title: $cdtitleecho Type: $cdtypeecho Artist/Composer: $cdacechoget_returnif [ "$asklist" = "y" ]; thenecho -e "View tracks for this CD? \c"read xif [ "$x" = "y" ]; thenecholist_tracksechofifireturn 1}8. Функция
позволит вам повторно ввести сведения о компакт-диске. Учтите, что вы ищите (с помощью командыupdate_cd) строки, начинающиеся (grep) с подстроки^, за которой следует$cdcatnumи должны заключить подстановку значения", "в$cdcatnum. Таким образом, вы сможете найти запятую без специального пробельного символа между ней и номером в каталоге. Эта функция также использует{}для образования блока из нескольких операторов, которые должны выполняться, если функция{}вернет значение true.get_confirmupdate_cd() {if [ -z "$cdcatnum" ]; thenecho "You must select a CD first"find_cd nfiif [ -n "$cdcatnum" ]; thenecho "Current tracks are :-"list_tracksechoecho "This will re-enter the tracks for $cdtitle"get_confirm && {grep -v "^${cdcatnum}, " $tracks_file > $temp_filemv $temp_file $tracks_fileechoadd_record_tracks}fireturn}9. Функция
дает возможность быстро пересчитать содержимое базы данных.count_cdscount_cds() {set $(wc -l $title_file)num_titles=$1set $(wc -l $tracks_file)num_tracks=$1echo found $num_titles CDs, with a total of $num_tracks tracksget_returnreturn}10. Функция
удаляет элементы из файлов базы данных с помощью командыremove_records, удаляющей все совпадающие строки. Учтите, что нужно применять временный файл.grep -vЕсли вы попытаетесь применить команду:
grep -v "^$cdcatnum" > $title_fileфайл
станет пустым благодаря перенаправлению вывода$title_fileдо того, как команда>выполнится, поэтому она будет читать уже пустой файл.grepremove_records() {if [ -z "$cdcatnum" ]; thenecho You must select a CD first find_cd nfiif [ -n "$cdcatnum" ]; thenecho "You are about to delete $cdtitle"get_confirm && {grep -v "^${cdcatnum}, " $title_file > $temp_filemv $temp_file $title_filegrep -v "^${cdcatnum}, " $tracks_file > $temp_filemv $temp_file $tracks_filecdcatnum=""echo Entry removed}get_returnfireturn}11. Функция
снова использует командуlist_tracksдля извлечения нужных вам строк, командуgrepдля доступа к отдельным полям и затем командуcutдля постраничного вывода. Если вы посмотрите, сколько строк на языке С займет повторная реализация этих 20 необычных строк кода, то поймете, каким мощным средством может быть командная оболочка.more