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

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

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

 echo "Good morning"

else

 echo "Good afternoon"

fi

exit 0

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран:

Is it morning? Please answer yes or no

yes

Good morning

$

Π’ этом сцСнарии для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ содСрТимого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ timeofday примСняСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° [. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ оцСниваСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ if, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ строки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для формирования отступа Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if. Π­Ρ‚ΠΎ дСлаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для удобства читатСля; командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

elif

К соТалСнию, с этим простым сцСнариСм связано нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ no (Π½Π΅Ρ‚) любой ΠΎΡ‚Π²Π΅Ρ‚ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ yes (Π΄Π°). МоТно ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ этому, воспользовавшись конструкциСй elif, которая позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ условиС, провСряСмоС ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ части else ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if (ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.3). 

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.3. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ elif

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ сцСнарий Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ» сообщСниС ΠΎΠ± ошибкС, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ yes ΠΈΠ»ΠΈ no. Для этого Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ else Π²Π΅Ρ‚ΠΊΠΎΠΉ elif ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ условиС:

#!/bin/sh

echo "Is it morning? Please answer yes or no "

read timeofday


if [ $timeofday = "yes" ]

then

 echo "Good morning"

elif [ $timeofday = "no" ]; then

 echo "Good afternoon"

else

 echo "Sorry, $timeofday not recognized. Enter yes or no "

 exit 1

fi

exit 0

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΏΠ΅Ρ€Π²ΠΎΠ΅ условиС Π½Π΅ Ρ€Π°Π²Π½ΠΎ true, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ elif провСряСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ снова. Если ΠΎΠ±Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ ΡƒΠ΄Π°Ρ‡Π½Ρ‹, выводится сообщСниС ΠΎΠ± ошибкС, ΠΈ сцСнарий Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 1, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния сцСнария.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, связанная с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

Π”Π°Π½Π½Ρ‹ΠΉ сцСнарий исправляСт Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ Π΄Π΅Ρ„Π΅ΠΊΡ‚, Π° Π±ΠΎΠ»Π΅Π΅ тонкая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° остаСтся Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΉ. ЗапуститС Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сцСнария, Π½ΠΎ вмСсто ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° вопрос просто Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ <Enter> (ΠΈΠ»ΠΈ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ… ΠΊΠ»Π°Π²ΠΈΡˆΡƒ <Return>). Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС ΠΎΠ± ошибкС:

[: =: unary operator expected

Π§Ρ‚ΠΎ ΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊ? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if. Когда ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ»Π°ΡΡŒ пСрСмСнная timeofday, ΠΎΠ½Π° состояла ΠΈΠ· пустой строки. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Π΅Ρ‚Π²ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if выглядСла ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

if [ = "yes" ]

ΠΈ Π½Π΅ прСдставляла собой Π²Π΅Ρ€Π½ΠΎΠ΅ условиС. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ этого слСдуСт Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:

if [ "$timeofday" = "yes" ]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° с пустой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ:

if [ "" = "yes" ]

Новый сцСнарий Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

#!/bin/sh


echo "Is it morning? Please answer yes or no "

read timeofday


if [ "$timeofday" = "yes" ]

then

 echo "Good morning"

elif [ "$timeofday" = "no" ]; then

 echo "Good afternoon"

else

 echo "Sorry, $timeofday not recognized. Enter yes or no "

 exit 1

fi


exit 0

Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ бСзопасСн, Π΄Π°ΠΆΠ΅ Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос просто Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ <Enter>.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π° echo ΡƒΠ΄Π°Π»ΠΈΠ»Π° Π½ΠΎΠ²ΡƒΡŽ строку Π² ΠΊΠΎΠ½Ρ†Π΅, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎ пСрСносимый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ printf (см. Ρ€Π°Π·Π΄. "printf" Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅) вмСсто ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… примСняСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° echo -Π΅, Π½ΠΎ ΠΎΠ½Π° поддСрТиваСтся Π½Π΅ всСми систСмами. Π’ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ bash для Π·Π°ΠΏΡ€Π΅Ρ‚Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку допускаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° echo -n, поэтому, Ссли Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ придСтся Ρ‚Ρ€ΡƒΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ bash, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

echo -n "Is it morning? Please answer yes or no: "

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ формируСтся Π·Π°Π·ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² этом случаС выглядит Ρ‡Π΅Ρ‚Ρ‡Π΅.

for

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ for для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ ряда Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой любоС мноТСство строк. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ просто пСрСчислСны Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‡Π°Ρ‰Π΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ подстановки ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ².

Бинтаксис этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° прост:

for пСрСмСнная in значСния

do

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

done

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ упраТнСния 2.4 ΠΈ 2.5.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.4. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° for ΠΊ фиксированным строкам

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ значСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдставлСны Π² Π²ΠΈΠ΄Π΅ строк, поэтому ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сцСнарий:

#!/bin/sh


for foo in bar fud 43

do

 echo $foo

done

exit 0

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

bar

fud

43

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку с for foo in bar fud 43 Π½Π° for foo in "bar fud 43"? НапоминаСм, Ρ‡Ρ‚ΠΎ вставка ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ заставляСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ находится ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, Π΅Π΄ΠΈΠ½ΠΎΠΉ строкой. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов сохранСния ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся пСрСмСнная foo ΠΈ Π΅ΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° for ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ значСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° считаСт ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ строковыми, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ строку 43 Ρ‚Π°ΠΊ ΠΆΠ΅ допустимо, ΠΊΠ°ΠΊ ΠΈ строку fud.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.5. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° for с мСтасимволами

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Ρ†ΠΈΠΊΠ» for ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ вмСстС с мСтасимволами ΠΈΠ»ΠΈ Π·Π½Π°ΠΊΠ°ΠΌΠΈ подстановки для ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ мСтасимвола для строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ прСдоставлСниС ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ возмоТности ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ всС значСния Π½Π° этапС выполнСния.

Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ этот ΠΏΡ€ΠΈΠ΅ΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ first. Π’ сцСнарии ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ срСдства подстановки ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ β€” символ * для подстановки ΠΈΠΌΠ΅Π½ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. КаТдоС ΠΈΠ· этих ΠΈΠΌΠ΅Π½ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $file Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° for.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π±Π΅Π³Π»ΠΎ просмотрим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ подстановки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мСтасимвола. Допустим, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ вывСсти Π½Π° экран всС ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² сцСнариСв Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Π±ΡƒΠΊΠ²Ρ‹ "f", ΠΈ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° всСх Π²Π°ΡˆΠΈΡ… сцСнариСв Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ символами .sh. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

#!/bin/sh


for file in $(ls f*.sh); do

 lpr $file

done

exit 0

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ синтаксичСской конструкции $(ΠΊΠΎΠΌΠ°Π½Π΄Π°), которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π΄Π°Π»Π΅Π΅ (Π² Ρ€Π°Π·Π΄Π΅Π»Π΅, посвящСнном Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для Ρ†ΠΈΠΊΠ»Π° for задаСтся Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ $().

Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° раскрываСт f*.sh, подставляя ΠΈΠΌΠ΅Π½Π° всСх Ρ„Π°ΠΉΠ»ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС подстановки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² сцСнариях ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя выполнСния сцСнария, Π° Π½Π΅ Π² процСссС ΠΈΡ… написания, поэтому всС синтаксичСскиС ошибки Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° этапС выполнСния, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π°Π½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ пустыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

while

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° считаСт всС значСния строками, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for Ρ…ΠΎΡ€ΠΎΡˆ для цикличСской ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠ² строк, Π½ΠΎ Π½Π΅ слишком ΡƒΠ΄ΠΎΠ±Π΅Π½, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅, сколько Ρ€Π°Π· придСтся Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.

Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, Π½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π΅ извСстно, сколько Ρ€Π°Π· слСдуСт ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Π²Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» while со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ синтаксичСской записью:

while  условиС

do

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

done

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ довольно слабой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ.

#!/bin/sh


echo "Enter password"

read trythis

while [ "$trythis" != "secret" ]; do

 echo "Sorry, try again"