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

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

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

bash$ egrep 're(a|e)d' misc.txt

People who read seem to be better informed than those who do not.

The clarinet produces sound by the vibration of its reed.


НСкоторыС вСрсии sed, ed ΠΈ ex ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ экранированныС вСрсии рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, описанных Π²Ρ‹ΡˆΠ΅.

ΠšΠ»Π°ΡΡΡ‹ символов POSIX. [:class:]

Π­Ρ‚ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ указания Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° символов.

Класс [:alnum:] -- соотвСтствуСт Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΌ символам ΠΈ Ρ†ΠΈΡ„Ρ€Π°ΠΌ. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ [A-Za-z0-9].

Класс [:alpha:] -- соотвСтствуСт символам Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ [A-Za-z].

Класс [:blank:] -- соотвСтствуСт символу ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΈΠ»ΠΈ символу табуляции.

Класс [:cntrl:] -- соотвСтствуСт ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ символам (control characters).

Класс [:digit:] -- соотвСтствуСт Π½Π°Π±ΠΎΡ€Ρƒ дСсятичных Ρ†ΠΈΡ„Ρ€. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ [0-9].

Класс [:graph:] (ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ ΠΈ псСвдографичСскиС символы) -- соотвСтствуСт Π½Π°Π±ΠΎΡ€Ρƒ символов ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ASCII 33 - 126. Π­Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ класс [:print:], Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ символа ΠΏΡ€ΠΎΠ±Π΅Π»Π°.

Класс [:lower:] -- соотвСтствуСт Π½Π°Π±ΠΎΡ€Ρƒ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹Ρ… символов Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ [a-z].

Класс [:print:] (ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы) -- соотвСтствуСт Π½Π°Π±ΠΎΡ€Ρƒ символов ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ASCII 32 - 126. По своСму составу этот класс ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ классу [:graph:], описанному Π²Ρ‹ΡˆΠ΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² этом классС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ присутствуСт символ ΠΏΡ€ΠΎΠ±Π΅Π»Π°.

Класс [:space:] -- соотвСтствуСт ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΌ символам (ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ табуляция).

Класс [:upper:] -- соотвСтствуСт Π½Π°Π±ΠΎΡ€Ρƒ символов Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ [A-Z].

Класс [:xdigit:] -- соотвСтствуСт Π½Π°Π±ΠΎΡ€Ρƒ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½Ρ‹Ρ… Ρ†ΠΈΡ„Ρ€. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ [0-9A-Fa-f].

Π’ΠΎΠΎΠ±Ρ‰Π΅, ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы POSIX Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ([[ ]]).

bash$ grep [[:digit:]] test.file

abc=723


Π­Ρ‚ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ограничСниями, Π΄Π°ΠΆΠ΅ Π² опСрациях подстановки ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² (globbing).

bash$ ls -l ?[[:digit:]][[:digit:]]?

-rw-rw-r-- 1 bozo bozo 0 Aug 21 14:47 a33b


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классов Π² сцСнариях Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-14 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-15.

Sed, awk ΠΈ Perl, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² сцСнариях Π² качСствС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ рСгулярныС выраТСния Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-13 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-19.

Книга "Sed & Awk" (Π°Π²Ρ‚ΠΎΡ€Ρ‹ Dougherty ΠΈ Robbins) Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈ ясноС прСдставлСниС ΠΎ рСгулярных выраТСниях (см. Ρ€Π°Π·Π΄Π΅Π» Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°).


18.2. Globbing -- ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ²

Bash, сам ΠΏΠΎ сСбС, Π½Π΅ распознаСт рСгулярныС выраТСния. Но Π² сцСнариях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ sed ΠΈ awk, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСкрасно ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

ЀактичСски, Bash ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ подстановку ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², этот процСсс называСтся "globbing", Π½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный Π½Π°Π±ΠΎΡ€ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ВмСсто этого, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ подстановки ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², производится распознаваниС ΠΈ интСрпрСтация ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… символов. Π’ число ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… шаблонов входят символы * ΠΈ ?, списки символов Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ^, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ отрицания). ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… символов ΠΈΠΌΠ΅Π΅Ρ‚ ряд Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. НапримСр, Ссли ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Ρ‚ΠΎΡ‡ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ: .bashrc), Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, содСрТащСму символ *[ 48 ]. Аналогично, символ ? Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ подстановки ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½ΠΎΠΉ смысл, Π½Π΅ΠΆΠ΅Π»ΠΈ Π² рСгулярных выраТСниях.

bash$ ls -l

total 2

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt


bash$ ls -l t?.sh

-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh


bash$ ls -l [ab]*

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1


bash$ ls -l [a-c]*

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1


bash$ ls -l [^ab]*

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt


bash$ ls -l {b*,c*,*est*}

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt


bash$ echo *

a.1 b.1 c.1 t2.sh test1.txt


bash$ echo t*

t2.sh test1.txt


Π”Π°ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° echo ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ символы Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-4.


Π“Π»Π°Π²Π° 19. ΠŸΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΠΈΠ»ΠΈ Subshells

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

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚, Ρ‚Π°ΠΊ ΠΆΠ΅, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс, Π² своСй ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅. Π­Ρ‚ΠΎ позволяСт сцСнариям Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒ процСсс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ нСскольким Π·Π°Π΄Π°Ρ‡Π°ΠΌ, исполняСмым ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Бписок ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках

( command1; command2; command3; ... )

Бписок ΠΊΠΎΠΌΠ°Π½Π΄, Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках, исполняСтся Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅.

ЗначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅. Они нСдоступны Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ процСссу. ЀактичСски, ΠΎΠ½ΠΈ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 19-1. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

#!/bin/bash

# subshell.sh


echo


outer_variable=Outer


(

inner_variable=Inner

echo "Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс, \"inner_variable\" = $inner_variable"

echo "Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс, \"outer\" = $outer_variable"

)


echo


if [ -z "$inner_variable" ]

then

echo "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ inner_variable Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅"

else

echo "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ inner_variable ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅"

fi


echo "Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс, \"inner_variable\" = $inner_variable"

# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ $inner_variable Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°

# ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ процСссС,

# Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ "Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅".


echo


exit 0

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 31-1.

+

Π‘ΠΌΠ΅Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ процСссС (ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅) Π½Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой смСну Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 19-2. Π›ΠΈΡ‡Π½Ρ‹Π΅ настройки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

#!/bin/bash

# allprofs.sh: Π²Ρ‹Π²ΠΎΠ΄ Π»ΠΈΡ‡Π½Ρ‹Ρ… настроСк (profiles) всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ


# Автор: Heiner Steven

# Π‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ измСнСниями, внСсСнными Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.


FILE=.bashrc # Π€Π°ΠΉΠ» настроСк ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ,

#+ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ сцСнарии называСтся ".profile".


for home in `awk -F: '{print $6}' /etc/passwd`

do

[ -d "$home" ] || continue # ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ссли Π½Π΅Ρ‚ домашнСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

[ -r "$home" ] || continue # ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ссли Π½Π΅ доступСн для чтСния.

(cd $home; [ -e $FILE ] && less $FILE)

done


# По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ сцСнария -- Π½Π΅Ρ‚ тСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ 'cd', Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³,

#+ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 'cd $home' выполняСтся Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅.


exit 0

ΠŸΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для задания "спСцифичСского окруТСния" для Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄.

COMMAND1

COMMAND2

COMMAND3

(

IFS=:

PATH=/bin

unset TERMINFO

set -C

shift 5

COMMAND4

COMMAND5

exit 3 # Π’Ρ‹Ρ…ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

)

# ИзмСнСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния Π½Π΅ коснСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

COMMAND6

COMMAND7

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ -- ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

if (set -u; : $variable) 2> /dev/null

then

echo "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°."

fi


# МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ: [[ ${variable-x} != x || ${variable-y} != y ]]

# ΠΈΠ»ΠΈ [[ ${variable-x} != x$variable ]]

# ΠΈΠ»ΠΈ [[ ${variable+x} = x ]])

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ -- ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ:

if (set -C; : > lock_file) 2> /dev/null

then

echo "Π­Ρ‚ΠΎΡ‚ сцСнарий ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ."

exit 65

fi


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


ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° нСсколько простых ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 19-3. Запуск Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ…

(cat list1 list2 list3 | sort | uniq > list123) &

(cat list4 list5 list6 | sort | uniq > list456) &

# БлияниС ΠΈ сортировка Π΄Π²ΡƒΡ… списков производится ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

# Запуск Π² Ρ„ΠΎΠ½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ исполнСниС.

#

# Π’ΠΎΡ‚ ΠΆΠ΅ эффСкт Π΄Π°Π΅Ρ‚

# cat list1 list2 list3 | sort | uniq > list123 &

# cat list4 list5 list6 | sort | uniq > list456 &


wait # ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ.