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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования Π½Π° языкС сцСнариСв ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 95

Автор МСндСль ΠšΡƒΠΏΠ΅Ρ€

22

Если $parameter "пустой",Π² Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… сцСнариях, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ с ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° 127 ("command not found").

23

Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ встроСнными ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ языка сцСнариСв ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ (shell), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ while, case ΠΈ Ρ‚.ΠΏ. -- ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ словами.

24

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡ€Π°Π²ΠΈΠ» -- ΠΊΠΎΠΌΠ°Π½Π΄Π° time, которая Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ Bash называСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом.

25

ΠžΠΏΡ†ΠΈΡ -- это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ сцСнария ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½. АргумСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² сСбС нСсколько ΠΎΠΏΡ†ΠΈΠΉ (ΠΊΠ»ΡŽΡ‡Π΅ΠΉ), опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сцСнария Π² соотвСтствии с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ опциями, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅..

26

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, исходныС тСксты ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π° языкС C, Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /usr/share/doc/bash-?.??/functions.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠ»ΡŽΡ‡ -f ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ enable ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах.

27

Π’ΠΎΡ‚ ΠΆΠ΅ эффСкт ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typeset -fu.

28

Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Ρ‚ΠΎΡ‡ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ~/.Xdefaults. Π’Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ выводятся простой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ls, ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ rm -rf *. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, скрытыми Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

29

Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для GNU-вСрсии ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ tr, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π² коммСрчСских UNIX-систСмах, ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

30

Команда tar czvf archive_name.tar.gz * Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Π² Π°Ρ€Ρ…ΠΈΠ² всС скрытыС Ρ„Π°ΠΉΠ»Ρ‹ (ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Ρ‚ΠΎΡ‡ΠΊΠΈ) ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π­Ρ‚ΠΎ нСдокумСнтированная "ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ" GNU-вСрсии tar.

31

Она Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ симмСтричного Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ с "ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ", ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстСн pgp.

32

Π”Π΅ΠΌΠΎΠ½ -- это Π½Π΅ΠΊΠΈΠΉ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс, Π½Π΅ привязанный Π½ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… сСссий. Π”Π΅ΠΌΠΎΠ½Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΠΎ Π½Π°ΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ события.

Π‘Π»ΠΎΠ²ΠΎ "Π΄Π΅ΠΌΠΎΠ½" ("daemon"), Π² грСчСской ΠΌΠΈΡ„ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΠ»ΠΎΡΡŒ для обозначСния ΠΏΡ€ΠΈΠ·Ρ€Π°ΠΊΠΎΠ², Π΄ΡƒΡ…ΠΎΠ², Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ мистичСского, свСрхСстСствСнного. Π’ ΠΌΠΈΡ€Π΅ UNIX -- ΠΏΠΎΠ΄ словом Π΄Π΅ΠΌΠΎΠ½ подразумСваСтся процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ "Ρ‚ΠΈΡ…ΠΎ" ΠΈ "Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ" выполняСт свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

33

ЀактичСски -- это сцСнарий, заимствованный ΠΈΠ· дистрибутива Debian Linux.

34

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ -- это Π³Ρ€ΡƒΠΏΠΏΠ° Π·Π°Π΄Π°Π½ΠΈΠΉ "ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄Π°" Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€.

35

Π­Ρ‚Π° Ρ‚Π΅ΠΌΠ° прСкрасно освСщСна Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ написал Andy Vaught, Introduction to Named Pipes, Π² сСнтябрС 1997 для Linux Journal.

36

EBCDIC (произносится ΠΊΠ°ΠΊ "ebb-sid-ic") -- это Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΎΡ‚ Extended Binary Coded Decimal Interchange Code (Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π”Π²ΠΎΠΈΡ‡Π½ΠΎ-ДСсятичный Код ОбмСна Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ). Π­Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ IBM, Π½Π΅ нашСдший ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ примСнСния. НС совсСм ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ conv=ebcdic -- это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ dd для быстрого ΠΈ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ, Π½ΠΎ слабого, ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ².

cat $file | dd conv=swab,ebcdic > $file_encrypted

# Π—Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ "Π°Π±Ρ€Π°ΠΊΠ°Π΄Π°Π±Ρ€Π°".

# опция swab Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° для внСсСния большСй Π½Π΅Ρ€Π°Π·Π±Π΅Ρ€ΠΈΡ…ΠΈ.


cat $file_encrypted | dd conv=swab,ascii > $file_plaintext

# Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

37

ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ -- это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, символичСская константа, которая прСдставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

38

Команда userdel Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, Ссли удаляСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с систСмой

39

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ записи ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ АлСкса Π£ΠΈΠ·Π΅Ρ€Π° (Alex Wither): Creating CDs, Π² ΠΎΠΊΡ‚ΡΠ±Ρ€ΡŒΡΠΊΠΎΠΌ выпускС ΠΆΡƒΡ€Π½Π°Π»Π° Linux Journal Π·Π° 1999 Π³ΠΎΠ΄.

40

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° mke2fs, с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ -c, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ поиск ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ².

41

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ…, дСсктопных Linux-систСм ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ tar.

42

NAND -- логичСская опСрация "И-НЕ". Π’ ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… ΠΎΠ½Π° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅.

43

Π—Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ внСшнСй систСмной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ (встроСнной) ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² сцСнарии.

44

дСскриптор Ρ„Π°ΠΉΠ»Π° -- это просто число, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ систСма ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. РассматривайтС Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ указатСля Π½Π° Ρ„Π°ΠΉΠ».

45

ΠŸΡ€ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·Ρ€Π²Π°Π½ΠΈΠΈ дСскриптора с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 5 ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Когда Bash ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ exec, Ρ‚ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс наслСдуСт дСскриптор 5 ΠΊΠ°ΠΊ "ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ" (см. Π°Ρ€Ρ…ΠΈΠ² ΠΏΠΎΡ‡Ρ‚Ρ‹ Π§Π΅Ρ‚Π° РамСя (Chet Ramey), SUBJECT: RE: File descriptor 5 is held open) ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот дСскриптор.

46

Π’ качСствС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ рСгулярного выраТСния ΠΌΠΎΠΆΠ½ΠΎ привСсти строку, Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… мСтасимволов.

47

[47]ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ sed, awk ΠΈ grep ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ строки, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π½Π΅ принимаСтся Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π’ Ρ‚Π΅Ρ… ΠΆΠ΅ случаях, ΠΊΠΎΠ³Π΄Π° производится Ρ€Π°Π·Π±ΠΎΡ€ многострочного тСкста, мСтасимвол "Ρ‚ΠΎΡ‡ΠΊΠ°" Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ символу ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

#!/bin/bash


sed -e 'N;s/.*/[&]/' << EOF # ВстроСнный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

line1

line2

EOF

# OUTPUT:

# [line1

# line2]


echo


awk '{ $0=$1 "\n" $2; if (/line.1/) {print}}' << EOF

line 1

line 2

EOF

# OUTPUT:

# line

# 1


# Бпасибо S.C.


exit 0

48

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Ρ‚Π°ΠΊΠΈΡ… ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ символ Ρ‚ΠΎΡ‡ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ явно ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² шаблонС.

~/[.]bashrc # НС Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ ~/.bashrc

~/?bashrc # Во ТС самоС.

# ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ символу Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈ подстановкС ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ².


~/.[b]ashrc # Имя ~./bashrc Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ

~/.ba?hrc # Аналогично.

~/.bashr* # Аналогично.


# Установка ΠΊΠ»ΡŽΡ‡Π° "dotglob" ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

# Бпасибо S.C.

49

Π˜ΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ (Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»), фактичСски, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ Π½Π΅ΠΊΠΎΠ³Π΄Π° использовались Π² опСрациях подстановки процСссов.

50

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ косвСнных ссылок Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 34-2) слишком Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ссылкС.

#!/bin/bash


ITERATIONS=3 # ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

icount=1


my_read () {

# ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ my_read varname,

# Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках,

# Π·Π°Ρ‚Π΅ΠΌ просит ввСсти Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.


local local_var


echo -n "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ "

eval 'echo -n "[$'$1'] "' # ΠŸΡ€Π΅ΠΆΠ½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

read local_var

[ -n "$local_var" ] && eval $1=\$local_var


# ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ "And-list": Ссли "local_var" Π½Π΅ пуста, Ρ‚ΠΎ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пСрСписываСтся Π² "$1".

}


echo


while [ "$icount" -le "$ITERATIONS" ]

do

my_read var

echo "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ #$icount = $var"

let "icount += 1"

echo

done


# Бпасибо Stephane Chazelas Π·Π° этот ΠΏΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.


exit 0

51

Команда return -- это встроСнная ΠΊΠΎΠΌΠ°Π½Π΄Π° Bash.

52

Herbert Mayer опрСдСляСт Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ, ΠΊΠ°ΠΊ "...описаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ простой вСрсии Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°..." РСкурсивной называСтся функция, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ самого сСбя.

53

Блишком глубокая рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ… сцСнария.

#!/bin/bash


recursive_function ()

{

(( $1 < $2 )) && recursive_function $(( $1 + 1 )) $2;

# Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ 1-ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€,

#+ ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ Π½Π΅ прСвысит, Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ.

}


recursive_function 1 50000 # Π“Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии = 50,000!

# Бамо собой -- Segmentation fault.


# РСкурсия Ρ‚Π°ΠΊΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ "ΠΎΠ±Ρ€ΡƒΡˆΠΈΡ‚ΡŒ" Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π½Π° C,

#+ ΠΏΠΎ исчСрпании памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ сСгмСнт стСка.


# Бпасибо S.C.


exit 0 # Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ здСсь, Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ошибки Segmentation fault.

54

Однако, псСвдонимы ΠΌΠΎΠ³ΡƒΡ‚ "Ρ€Π°ΡΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ" ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

55

Π­Ρ‚ΠΎ Π½Π΅ относится ΠΊ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌ, ΠΊΠ°ΠΊ csh, tcsh ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ классичСской Bourne shell (sh).