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

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

Жанры

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

У команды счетчика слов,

wc
, в выводе есть пробельный символ, разделяющий количества строк, слов и символов в файле. Используйте синтаксическую запись
$(wc -l $temp_file)
для извлечения первого параметра в выводе и переноса его в переменную
linesfound
. Если бы вам был нужен другой следующий далее параметр, нужно было бы воспользоваться командой
set
для установки значений переменных-параметров оболочки из вывода команды.

Изменив значение переменной

IFS
(Internal Field Separator, внутренний разделитель полей) на запятую, вы сможете разделить поля, разграниченные запятыми. Альтернативный вариант — применить команду
cut
.

find_сd {

 if [ "$1" = "n" ]; then

asklist=n

 else

asklist=y

 fi

 cdcatnum=""

 echo -e "Enter a string to search for in the CD titles \c"

 read searchstr

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

return 0

 fi

 grep "$searchstr" $title_file > $temp_file

 set $(wc -l $temp_file)

 linesfound=$1

 case "$linesfound" in

0)

echo "Sorry, nothing found"

get_return

return 0 ;;

1) ;;

2)

echo "Sorry, not unique."

echo "Found the following"

cat $temp_file

get_return

return 0

 esac

 IFS=", "

 read cdcatnum cdtitle cdtype cdac < $temp_file

 IFS=" "

 if [ -z "$cdcatnum" ]; then

echo "Sorry, could not extract catalog field from $temp_file"

get_return

return 0

 fi

 echo

 echo Catalog number: $cdcatnum echo Title: $cdtitle

 echo Type: $cdtype

 echo Artist/Composer: $cdac

 echo

 get_return

 if [ "$asklist" = "y" ]; then

echo -e "View tracks for this CD? \c"

read x

if [ "$x" = "y" ]; then

echo

list_tracks

echo

fi

 fi

 return 1

}

8. Функция

update_cd
позволит вам повторно ввести сведения о компакт-диске. Учтите, что вы ищите (с помощью команды
grep
) строки, начинающиеся (
^
) с подстроки
$cdcatnum
, за которой следует
", "
и должны заключить подстановку значения
$cdcatnum
в
{}
. Таким образом, вы сможете найти запятую без специального пробельного символа между ней и номером в каталоге. Эта функция также использует
{}
для образования блока из нескольких операторов, которые должны выполняться, если функция
get_confirm
вернет значение true.

update_cd {

 if [ -z "$cdcatnum" ]; then

echo "You must select a CD first"

find_cd n

 fi

 if [ -n "$cdcatnum" ]; then

echo "Current tracks are :-"

list_tracks

echo

echo "This will re-enter the tracks for $cdtitle"

get_confirm && {

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

mv $temp_file $tracks_file

echo

add_record_tracks

}

 fi

 return

}

9. Функция

count_cds
дает возможность быстро пересчитать содержимое базы данных.

count_cds {

 set $(wc -l $title_file)

 num_titles=$1

 set $(wc -l $tracks_file)

 num_tracks=$1

 echo found $num_titles CDs, with a total of $num_tracks tracks

 get_return

 return

}

10. Функция

remove_records
удаляет элементы из файлов базы данных с помощью команды
grep -v
, удаляющей все совпадающие строки. Учтите, что нужно применять временный файл.

Если вы попытаетесь применить команду:

grep -v "^$cdcatnum" > $title_file

файл

$title_file
станет пустым благодаря перенаправлению вывода
>
до того, как команда
grep
выполнится, поэтому она будет читать уже пустой файл.

remove_records {

 if [ -z "$cdcatnum" ]; then

echo You must select a CD first find_cd n

 fi

 if [ -n "$cdcatnum" ]; then

echo "You are about to delete $cdtitle"

get_confirm && {

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

Точка Бифуркации XI

Смит Дейлор
11. ТБ
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации XI

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Позывной "Князь"

Котляров Лев
1. Князь Эгерман
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Позывной Князь

Путешественник по Изнанке

Билик Дмитрий Александрович
4. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
попаданцы
мистика
5.00
рейтинг книги
Путешественник по Изнанке

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

Винокуров Юрий
38. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
юмористическое фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVIII

Виконт. Книга 4. Колонист

Юллем Евгений
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.50
рейтинг книги
Виконт. Книга 4. Колонист

Хозяин Стужи 4

Петров Максим Николаевич
4. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Хозяин Стужи 4

Первый среди равных. Книга XII

Бор Жорж
12. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга XII

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Гранд империи

Земляной Андрей Борисович
3. Страж
Фантастика:
фэнтези
попаданцы
альтернативная история
5.60
рейтинг книги
Гранд империи

Контртеррор

Валериев Игорь
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Контртеррор

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

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

Надуй щеки! Том 5

Вишневский Сергей Викторович
5. Чеболь за партой
Фантастика:
попаданцы
дорама
7.50
рейтинг книги
Надуй щеки! Том 5

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС