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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 104

Автор Шоттс Уильям

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β write_html_page > $filename

Β Β Β Β Β Β Β Β else

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β echo "$PROGNAME: Cannot write file '$filename'" >&2

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β exit 1

Β Β Β Β Β Β Β Β fi

else

Β Β Β Β Β Β Β Β write_html_page

fi

Π£ нас ΡƒΠΆΠ΅ получился Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ сцСнарий, Π½ΠΎ ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π³ΠΎ послСднСС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅.

33. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния: Ρ†ΠΈΠΊΠ» for

Π’ этой Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π³Π»Π°Π²Π΅, посвящСнной ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния, ΠΌΡ‹ познакомимся Π΅Ρ‰Π΅ с ΠΎΠ΄Π½ΠΎΠΉ конструкциСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅. Π¦ΠΈΠΊΠ» for отличаСтся ΠΎΡ‚ Ρ†ΠΈΠΊΠ»ΠΎΠ² while ΠΈ until ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ срСдств ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ полСзная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Как слСдствиС, Ρ†ΠΈΠΊΠ» for ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ большой ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ срСди создатСлСй сцСнариСв для bash.

Π¦ΠΈΠΊΠ» for Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½, Ρ‡Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ СстСствСнно, Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for. Π’ соврСмСнных вСрсиях bash поддСрТиваСтся Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for.

for: традиционная Ρ„ΠΎΡ€ΠΌΠ°

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

for пСрСмСнная [in слова]; do

Β Β Β Β Β Β Β Β ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

done

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

ΠšΠΎΠΌΠ°Π½Π΄Ρƒ for ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Рассмотрим, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

[[email protected] ~]$ for i in A B C D; do echo $i; done

A

B

C

D

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° for ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… слов: A, B, C ΠΈ D. Для ΠΎΠ±Ρ…ΠΎΠ΄Π° этого списка выполняСтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i присваиваСтся ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ слово. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° находится ΠΊΠΎΠΌΠ°Π½Π΄Π° echo, ΠΎΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ присваиваниС Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ выполняСтся. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² случаС с Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ while ΠΈ until, Ρ†ΠΈΠΊΠ» for заканчиваСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом done.

По-настоящСму ΠΌΠΎΡ‰Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ for являСтся Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ способов формирования списка слов. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подстановку Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках:

[[email protected] ~]$ for i in {A..D}; do echo $i; done

A

B

C

D

ΠΈΠ»ΠΈ подстановку ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ²:

[[email protected] ~]$ for i in distros*.txt; do echo $i; done

distros-by-date.txt

distros-dates.txt

distros-key-names.txt

distros-key-vernums.txt

distros-names.txt

distros.txt

distros-vernums.txt

distros-versions.txt

ΠΈΠ»ΠΈ подстановку ΠΊΠΎΠΌΠ°Π½Π΄:

#!/bin/bash

# longest-word : поиск самой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ строки Π² Ρ„Π°ΠΉΠ»Π΅

while [[ -n $1 ]]; do

Β Β Β Β Β Β Β Β if [[ -r $1 ]]; then

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_word=

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_len=0

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β for i in $(strings $1); do

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β len=$(echo $i | wc -c)

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β if (( len > max_len )); then

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_len=$len

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_word=$i

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β fi

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β done

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β echo "$1: '$max_word' ($max_len characters)"

Β Β Β Β Β Β Β Β fi

Β Β Β Β Β Β Β Β shift

done

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ осущСствляСт поиск самой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ строки Π² Ρ„Π°ΠΉΠ»Π΅. Когда Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΡƒΠΊΠ°Π·Π°Π½ΠΎ нСсколько ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², сцСнарий Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ strings (Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав ΠΏΠ°ΠΊΠ΅Ρ‚Π° GNU binutils), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список «слов» ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π¦ΠΈΠΊΠ» for ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ опрСдСляСт, являСтся Π»ΠΈ ΠΎΠ½ΠΎ самым Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ ΠΈΠ· Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π²ΡˆΠΈΡ…ΡΡ Π΄ΠΎ сих ΠΏΠΎΡ€. По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° сцСнарий Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ самоС Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ слово.

Если Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ слова Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ for отсутствуСт, ΠΎΠ½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ использованиС этого способа, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ сцСнарий longest-word:

#!/bin/bash

# longest-word2 : поиск самой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ строки Π² Ρ„Π°ΠΉΠ»Π΅

for i; do

Β Β Β Β Β Β Β Β if [[ -r $i ]]; then

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_word=

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_len=0

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β for j in $(strings $i); do

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β len=$(echo $j | wc -c)

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β if (( len > max_len )); then

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_len=$len

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β max_word=$j

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β fi

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β done

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β echo "$i: '$max_word' ($max_len characters)"

Β Β Β Β Β Β Β Β fi

done

ΠŸΠΎΡ‡Π΅ΠΌΡƒ i?

Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎ всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Ρ†ΠΈΠΊΠ»Π° for Π²Ρ‹ΡˆΠ΅ использовалась пСрСмСнная i. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π° этим Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π½Π΅ стоят ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ стрСмлСния ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ традициям. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ for ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½ΠΎ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пСрСмСнная i, Π° Ρ‚Π°ΠΊΠΆΠ΅ j ΠΈ k.

Π‘Π²ΠΎΠΈΠΌΠΈ корнями эта традиция ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² язык программирования Fortran. Π’ Fortran Π½Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Π±ΡƒΠΊΠ² I, J, K, L ΠΈ M, автоматичСски ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ цСлочислСнными, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹, β€” Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΈΠ»ΠΈ вСщСствСнными (способны Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ числа с Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ). Π­Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π»Π° программистов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ I, J ΠΈ K Π² качСствС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ использованиС ΠΈΡ… Π² качСствС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Π° Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ) Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… усилий.

Из-Π·Π° этого Π΄Π°ΠΆΠ΅ Π² срСдС программистов Π½Π° Fortran Ρ…ΠΎΠ΄ΠΈΠ»Π° острота: Β«GOD is real, unless declared integerΒ» (Π‘ΠΎΠ³ дСйствитСлСн, ΠΏΠΎΠΊΠ° явно Π½Π΅ объявлСн Ρ†Π΅Π»Ρ‹ΠΌ).

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ внСшний Ρ†ΠΈΠΊΠ» while Ρ†ΠΈΠΊΠ»ΠΎΠΌ for. Π’Π°ΠΊ ΠΊΠ°ΠΊ список слов Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ for отсутствуСт, ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ вмСсто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пСрСмСнная j. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° shift.

for: Ρ„ΠΎΡ€ΠΌΠ° Π² стилС языка C

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вСрсии bash Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° вторая Ρ„ΠΎΡ€ΠΌΠ° синтаксиса ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π°Ρ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² языкС программирования C, которая поддСрТиваСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками.

for (( Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3 )); do

Β Β Β Β Β Β Β Β ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

done

Π³Π΄Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2 ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3 β€” это арифмСтичСскиС выраТСния, Π° ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρ‹ β€” это ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, выполняСмыС Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.

Π‘Π²ΠΎΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ эта Ρ„ΠΎΡ€ΠΌΠ° эквивалСнтна ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ конструкции:

(( Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1 ))

while (( Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2 )); do

Β Β Β Β Β Β Β Β ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Β Β Β Β Β Β Β Β (( Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3 ))

done

Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ», Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2 опрСдСляСт условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π°, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3 выполняСтся Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ примСнСния:

#!/bin/bash

# simple_counter : дСмонстрация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for Π² стилС языка C

for (( i=0; i<5; i=i+1 )); do

Β Β Β Β Β Β Β Β echo $i

done

Π­Ρ‚ΠΎΡ‚ сцСнарий ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

[[email protected] ~]$ simple_counter

0

1

2

3

4

Π—Π΄Π΅ΡΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2 позволяСт ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i остаСтся мСньшС 5, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π€ΠΎΡ€ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for Π² стилС языка C выглядит ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, Ссли трСбуСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с числовыми ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ. НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π΅Π΅ примСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… Π³Π»Π°Π²Π°Ρ….

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Познакомившись с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ for, внСсСм Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ Π² наш сцСнарий sys_info_page. Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ функция report_home_space выглядит Ρ‚Π°ΠΊ:

report_home_space () {