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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux: ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 56

Автор ДСнис ΠšΠΎΠ»ΠΈΡΠ½ΠΈΡ‡Π΅Π½ΠΊΠΎ

# mkdir /image

# modprobe usb_storage

# mount /dev/sda1 /image

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° Π½ΠΎΠ²ΠΎΠΌ винчСстСрС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ fdisk ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ установки β€” ΠΊΠ°ΠΊ Π²Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. Если ΠΆΠ΅ Π²Ρ‹ восстанавливаСтС систСму послС сбоя, Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ β€” всС ΡƒΠΆΠ΅ создано. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ (Ρ‚ΠΈΠΏ Ρ€Π°Π·Π΄Π΅Π»Π° /dev/hda2 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Linux swap):

# mkswap /dev/hda2

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ if ΠΈ of ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ dd β€” Π½Π° этот Ρ€Π°Π· ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ помСнялись мСстами):

# dd if=/image/image.bin of=/dev/hda1

БСйчас Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Β«Π²Π½ΡƒΡ‚Ρ€ΡŒΒ» Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°:

# mkdir /install

# mount /dev/hda1 /install

# chroot /install /bin/bash

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΡ€Π½Π΅ΠΌ стал ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /install, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ винчСстСр, Π° Π² качСствС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ /bin/bash. ВсС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” это ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ. Если Ρƒ вас LILO, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

# lilΠΎ

А Ссли GRUB:

# grub-install /dev/hda

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ (reboot) β€” ваша систСма ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ восстановлСна послС клонирования.

Π“Π»Π°Π²Π° 8

Π―Π·Ρ‹ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°

Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ часто выполняСмых Ρ€Π°Π±ΠΎΡ‚ ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ систСмы Π²Π°ΠΌ понадобится ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² сцСнарии. Π‘ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌΠΈ сцСнариями, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ пСрСчислСнных ΠΊΠΎΠΌΠ°Π½Π΄, Π²Ρ‹ ΡƒΠΆΠ΅ познакомились Π² Π³Π». 3. Π£Ρ‚ΠΎΡ‡Π½ΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, ΠΊΠ°ΠΊ систСма ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сцСнарии. Она ΠΈΡ‰Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Ρ„Π°ΠΉΠ»Π° сцСнария Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

#!/Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ/ΠΏΡƒΡ‚ΡŒ/ΠΊ/ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅/ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ/сцСнария

ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сцСнарий Π΅ΠΉ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· установлСнных Π² систСмС ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, #!/bin/tcsh), Π»ΠΈΠ±ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… языков (#!/usr/bin/perl), Π»ΠΈΠ±ΠΎ ваш собствСнный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€: #!/usr/bin/my_program. Если сцСнарий ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ sh, Ρ‚ΠΎ Π΅Π΅ имя ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠœΠ΅ΠΆΠ΄Ρƒ символами # ΠΈ ! Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ нСпосрСдствСнно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» сцСнария Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ полномочия Π½Π° исполнСниС этого Ρ„Π°ΠΉΠ»Π°. Если ΠΎΠ½ доступСн Π²Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

$ /ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°/ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ -f <имя_Ρ„Π°ΠΉΠ»Π°>

Π­Ρ‚Π° Π³Π»Π°Π²Π° посвящСна языку программирования, встроСнному Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ bash.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ опСрациями этого языка слуТат всС установлСнныС Π² систСмС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ сцСнарии. ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΡ…, запускаСт, обСспСчиваСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈΠΌ β€” Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ β€” Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, выполняСт подстановку ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ раскрытиС шаблонов. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° содСрТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ†ΠΈΠΊΠ»Π° ΠΈ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ получаСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΉ язык программирования.

8.1. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ВмСсто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… языках программирования, Π² bash ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ понятиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ИмСнСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ: слово, состоящСС ΠΈΠ· латинских Π±ΡƒΠΊΠ², Ρ†ΠΈΡ„Ρ€ ΠΈ Π·Π½Π°ΠΊΠΎΠ² подчСркивания, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ с Π±ΡƒΠΊΠ²Ρ‹; число; ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов; *, #, ?, $, !, 0, _.

Π’ΠΈΠΏ всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² β€” строковый. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (хотя Π±Ρ‹ пустая строка), Ρ‚ΠΎ говорят, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π°Π΄Π°Π½ ΠΈΠ»ΠΈ установлСн. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ символ $ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ:

$ echo $0

bash

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ дСлятся Π½Π°:

♦ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ β€” ΠΎ Π½ΠΈΡ… рассказано Π² ΠΏ. 3.4.3;

♦ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ β€” ΠΈΡ… ΠΈΠΌΠ΅Π½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число, Π° значСниями слуТат Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ, начиная с 1, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΈΠ»ΠΈ самой ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΈ ΠΈΡ… запускС;

♦ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ β€” ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ слуТат пСрСчислСнныС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы, Π° Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свСдСно Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ 8.1. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ β€” ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, подстановку ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°.


Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π’Π°Π±Π»ΠΈΡ†Π° 8.1

НазваниС ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° $0 Имя выполняСмого сцСнария (ΠΈΠ»ΠΈ, Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, β€” самой ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ) $# ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ $_ ПослСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈΠ· Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ²ΡˆΠΈΡ…ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ $? Код Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ послСднСй Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (напоминаю, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ, Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΌ) $$ НомСр Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса (PID) $! НомСр (PID) послСднСго асинхронного процСсса (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅) $* ВсС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, слитыС Π² ΠΎΠ΄Π½Ρƒ строку: Β«$*Β» эквивалСнтно Β«$1x$2x…,$nΒ», Π³Π΄Π΅ x β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS (internal field separator), ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” ΠΏΡ€ΠΎΠ±Π΅Π» [email protected] ВсС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌΡƒ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ: Β« [email protected]Β» эквивалСнтно Β«$1Β» Β«$2Β» ... Β«$nΒ»

Напоминаю, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы Π² значСниях ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ символ ΠΌΠΎΠΆΠ½ΠΎ символом Β«\Β» (ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш), нСсколько β€” апострофами ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ подстановки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: сравнитС Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ echo '$0' ΠΈ echo "$0".

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ read:

echo -n "ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ? (y/n): "

read yesno

echo $yesno

ΠšΠ»ΡŽΡ‡ -n ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ символ Π½ΠΎΠ²ΠΎΠΉ строки Π² ΠΊΠΎΠ½Ρ†Π΅ сообщСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ строку. Команда read Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΈ записываСт Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ yesno. ПослСдняя ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Одной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ read ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

read name middle lastname

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ввСсти значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, раздСляя ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, ΠΈ для окончания Π²Π²ΠΎΠ΄Π° Π½Π°ΠΆΠ°Ρ‚ΡŒ <Π’Π²ΠΎΠ΄>. Если Π²Π²Π΅Π΄Π΅Π½ΠΎ мСньшС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ присвоСна пустая строка. Если большС, Ρ‚ΠΎ вСсь остаток строки Π±ΡƒΠ΄Π΅Ρ‚ присвоСн послСднСй ΠΈΠ· пСрСчислСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

8.2. ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ

ΠšΡ€ΠΎΠΌΠ΅ подстановки ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΏ.3.4.4) ΠΈ раскрытия шаблонов ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΏ.3.4.5), ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° bash ΡƒΠΌΠ΅Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ подстановки:

♦ ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Ρ‚ΠΈΠ»ΡŒΠ΄Ρ‹:

~ замСняСтся Π½Π° имя домашнСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ²ΡˆΠ΅Π³ΠΎ сцСнарий;

~+ замСняСтся Π½Π° ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ;

~- замСняСтся Π½Π° ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ.

♦ Π Π°ΡΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ скобок:

строка1{строка2,строка3...}строкаN замСняСтся Π½Π°: строка1строка2строкаN строка1строка3строкаN ...

ΠŸΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ. Π­Ρ‚Π° функция ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊ нСскольким Ρ„Π°ΠΉΠ»Π°ΠΌ, Π½Π΅ подходящим ΠΏΠΎΠ΄ ΠΎΠ±Ρ‰ΠΈΠΉ шаблон:

$ cat /home/den/linuxbook/{intro,param,subst} > glava8

♦ ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

$((Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)) ΠΈΠ»ΠΈ $[Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅] β€” эквивалСнтныС Ρ„ΠΎΡ€ΠΌΡ‹ записи. Π’Π½ΡƒΡ‚Ρ€ΠΈ выраТСния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. man bash, сСкция ARITHMETIC EVALUATION.

НапримСр, количСство часов, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π΅ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° запуски ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ echo $(( $SECONDS/3600 ))

8.3. ΠœΠ°ΡΡΠΈΠ²Ρ‹

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ bash ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ числом элСмСнтов. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ограничСния Π½Π° массивы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ksh максимальноС число элСмСнтов массива ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ 1024 элСмСнтами.

НумСрация элСмСнтов начинаСтся с нуля. Π’ΠΈΠΏ элСмСнтов массива, ΠΊΠ°ΠΊ ΠΈ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², строковый. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнту массива ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠΉ конструкции:

Имя_массива[индСкс] = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

$ weekday[0]=ПонСдСльник

$ weekday[4]=ΠŸΡΡ‚Π½ΠΈΡ†Π°

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ элСмСнта массива ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

${имя_массива[индСкс]}

НапримСр, вывСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

$ echo ${weekday[0]}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊΠΎ всСм элСмСнтам массива сразу ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

${имя_массива[*]} ΠΈΠ»ΠΈ ${имя_массива[@]}, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

$echo ${weekday[*]}

ПонСдСльник ΠŸΡΡ‚Π½ΠΈΡ†Π°

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта массива ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.