Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 28

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

β–‘ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ… ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Волько Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎ потрСбуСтся, Ссли Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этом см. Π² Π³Π»Π°Π²Π΅ 7), поэтому Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Ρ‹.

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ для Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:

β–‘ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅;

β–‘ Π½Π°Π·Π²Π°Π½ΠΈΠ΅;

β–‘ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ (классика, Ρ€ΠΎΠΊ, ΠΏΠΎΠΏ, Π΄ΠΆΠ°Π· ΠΈ Ρ‚.Π΄.);

β–‘ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ.

О Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ… Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π²Π΅ характСристики:

β–‘ Π½ΠΎΠΌΠ΅Ρ€ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ;

β–‘ Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

Для объСдинСния Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ… с ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС. Для этого Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ диска, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ….

Π’ Ρ‚Π°Π±Π». 2.22 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ» с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ прСдставлСно Π² Ρ‚Π°Π±Π». 2.23.


Π’Π°Π±Π»ΠΈΡ†Π° 2.22

Catalog Title Type Composer CD123 Cool sax Jazz Bix CD234 Classic violin Classical Bach CD345 Hits99 Pop Various

Π’Π°Π±Π»ΠΈΡ†Π° 2.23

Catalog Track No. Title CD123 1 Some jazz CD123 2 More jazz CD234 1 Sonata in D minor CD345 1 Dizzy

Π”Π²Π° Ρ„Π°ΠΉΠ»Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ 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().

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.23. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков

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' EXIT

3. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ваши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сцСнарий, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡΡΡŒ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки, ΠΌΠΎΠ³ Π½Π°ΠΉΡ‚ΠΈ всС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ… Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах, сначала Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, слуТащиС простыми ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ:

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_choice. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ мСню измСняСтся динамичСски, добавляя Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска.

set_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 -Π΅ Π½Π΅ пСрСносится Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

5. Π”Π°Π»Π΅Π΅ ΠΈΠ΄ΡƒΡ‚ Π΄Π²Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, insert_title ΠΈ insert_track, для пополнСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ программисты нСнавидят однострочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€ΠΎΠ΄Π΅ этих, ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ понятнСС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π° Π½ΠΈΠΌΠΈ слСдуСт Π±ΠΎΠ»Π΅Π΅ длинная функция add_record_track, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ примСняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° соотвСтствиС ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π²ΠΎΠ΄ запятых (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ запятыС для раздСлСния ΠΏΠΎΠ»Π΅ΠΉ), ΠΈ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для увСличСния Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ Π½Π° 1, ΠΊΠΎΠ³Π΄Π° вводятся Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ΅.

insert_title() {

 echo $* >> $title_file

 return

}

insert_track() {

 echo $* >> $tracks_file

 return

}

add_record_tracks() {

 echo "Enter track information for this CD"

 echo "When no more tracks enter q"

 cdtrack=1

 cdttitle=""

 while [ "$cdttitle" != "q" ]

 do

  echo -e "Track $cdtrack, track title? \c"

  read tmp

  cdttitle=${tmp%%, *}

  if [ "$tmp" != "$cdttitle" ]; then

   echo "Sorry, no commas allowed"

   continue

  fi

  if [ -n "$cdttitle" ] ; then

   if [ "$cdttitle" ! = "q" ]; then

    insert_track $cdcatnum, $cdtrack, $cdttitle

   fi

  else

   cdtrack=$((cdtrack-1))

  fi

  cdtrack=$((cdtrack+1))

 done

}

6. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ add_records позволяСт Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС.

add_records() {

 # Подсказка для Π½Π°Ρ‡Π°Π»Π° Π²Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

 echo -Π΅ "Enter catalog name \с"

 read tmp

 cdcatnum=${tmp%%, *}

 echo -e "Enter title \c"

 read tmp

 cdtitle=${tmp%%, *}

 echo -e "Enter type \c"

 read tmp

 cdtype=${tmp%%, *}

 echo -e "Enter artist/composer \c"

 read tmp

 cdac=${tmp%%, *}

 # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, Ρ…ΠΎΡ‡Π΅Ρ‚ Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ввСсти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ

 echo About to add new entry

 echo "$cdcatnum $cdtitle $cdtype $cdac"

 # Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, добавляСт Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.

 # с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ

 if get_confirm ; then