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

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

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

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ${0##*/} это подстановка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ${var##pattern}. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся $0.


-*) FILENAME=./$1;; # Если имя Ρ„Π°ΠΉΠ»Π° (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ $1) начинаСтся с "-",

# Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ./$1

# Ρ‚ΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.


* ) FILENAME=$1;; # Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС -- $1.

esac


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-26. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ case допускаСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подстановку ΠΊΠΎΠΌΠ°Π½Π΄ вмСсто Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

#!/bin/bash

# ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ Π² "case".


case $( arch ) in # ΠΊΠΎΠΌΠ°Π½Π΄Π° "arch" Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ Π°ΠΏΡ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ.

i386 ) echo "Машина Π½Π° Π±Π°Π·Π΅ процСссора 80386";;

i486 ) echo "Машина Π½Π° Π±Π°Π·Π΅ процСссора 80486";;

i586 ) echo "Машина Π½Π° Π±Π°Π·Π΅ процСссора Pentium";;

i686 ) echo "Машина Π½Π° Π±Π°Π·Π΅ процСссора Pentium2 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅";;

* ) echo "Машина Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ процСссора";;

esac


exit 0

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ case допускаСт использованиС ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… конструкций.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-27. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сравнСния строк

#!/bin/bash

# match-string.sh: простоС сравнСниС строк


match_string ()

{

MATCH=0

NOMATCH=90

PARAMS=2 # Ѐункция Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

BAD_PARAMS=91


[ $# -eq $PARAMS ] || return $BAD_PARAMS


case "$1" in

"$2") return $MATCH;;

* ) return $NOMATCH;;

esac


}


a=one

b=two

c=three

d=two


match_string $a # Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

echo $? # 91


match_string $a $b # Π½Π΅ Ρ€Π°Π²Π½Ρ‹

echo $? # 90


match_string $b $d # Ρ€Π°Π²Π½Ρ‹

echo $? # 0


exit 0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-28. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Π²ΠΎΠ΄Π°

#!/bin/bash

# isalpha.sh: ИспользованиС "case" для Π°Π½Π°Π»ΠΈΠ·Π° строк.


SUCCESS=0

FAILURE=-1


isalpha () # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° - являСтся Π»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки символом Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°.

{

if [ -z "$1" ] # Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°?

then

return $FAILURE

fi


case "$1" in

[a-zA-Z]*) return $SUCCESS;; # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ - Π±ΡƒΠΊΠ²Π°?

* ) return $FAILURE;;

esac

} # Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ "isalpha ()" Π² языкС C.


isalpha2 () # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° - состоит Π»ΠΈ вся строка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· символов Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°.

{

[ $# -eq 1 ] || return $FAILURE


case $1 in

*[!a-zA-Z]*|"") return $FAILURE;;

*) return $SUCCESS;;

esac

}


isdigit () # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° - состоит Π»ΠΈ вся строка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Ρ†ΠΈΡ„Ρ€.

{ # Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами - являСтся Π»ΠΈ строка Ρ†Π΅Π»Ρ‹ΠΌ числом.

[ $# -eq 1 ] || return $FAILURE


case $1 in

*[!0-9]*|"") return $FAILURE;;

*) return $SUCCESS;;

esac

}


check_var () # Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΊ isalpha

{

if isalpha " [email protected]"

then

echo "\"$*\" начинаСтся с Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠ³ΠΎ символа."

if isalpha2 " [email protected]"

then # Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Ссли ΠΏΠ΅Ρ€Π²ΠΉ символ Π½Π΅ Π±ΡƒΠΊΠ²Π°.

echo "\"$*\" содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹Π΅ символы."

else

echo "\"$*\" содСрТит ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Π½Π΅ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΉ символ."

fi

else

echo "\"$*\" начинсСтся с Π½Π΅ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠ³ΠΎ символа ."

# Если функция Π²Ρ‹Π·Π²Π°Π½Π° Π±Π΅Π· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°,

#+ Ρ‚ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ строка содСрТит "Π½Π΅ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΉ" символ.

fi


echo


}


digit_check () # Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΊ isdigit ().

{

if isdigit " [email protected]"

then

echo "\"$*\" содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹ [0 - 9]."

else

echo "\"$*\" содСрТит ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Π½Π΅ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ символ."

fi


echo


}


a=23skidoo

b=H3llo

c=-What?

d=What?

e=`echo $b` # ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

f=AbcDef

g=27234

h=27a34

i=27.34


check_var $a

check_var $b

check_var $c

check_var $d

check_var $e

check_var $f

check_var # Π’Ρ‹Π·ΠΎΠ² Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚?

#

digit_check $g

digit_check $h

digit_check $i


exit 0 # Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ S.C.


# Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅:

# --------

# ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ 'isfloat ()', которая провСряла Π±Ρ‹ вСщСствСнныС числа.

# Подсказка: Π­Ρ‚Π° функция ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 'isdigit ()',

#+ Π½Π°Π΄ΠΎ лишь Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· наличия дСсятичной Ρ‚ΠΎΡ‡ΠΊΠΈ.

select

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ select Π±Ρ‹Π» заимствован ΠΈΠ· Korn Shell, ΠΈ являСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ инструмСнтом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ создании мСню.

select variable [in list] do command... break done


Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· прСдставлСнных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ select ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² качСствС ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ ΠΊ Π²Π²ΠΎΠ΄Ρƒ (prompt) -- PS3 (#? ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-29. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мСню с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ select

#!/bin/bash


PS3='Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ ΠΎΠ²ΠΎΡ‰: ' # строка ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ ΠΊ Π²Π²ΠΎΠ΄Ρƒ (prompt)


echo


select vegetable in "Π±ΠΎΠ±Ρ‹" "ΠΌΠΎΡ€ΠΊΠΎΠ²ΡŒ" "ΠΊΠ°Ρ€Ρ‚ΠΎΡ„Π΅Π»ΡŒ" "Π»ΡƒΠΊ" "Π±Ρ€ΡŽΠΊΠ²Π°"

do

echo

echo "Π’Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ $vegetable."

echo ";-))"

echo

break # Ссли 'break' ΡƒΠ±Ρ€Π°Ρ‚ΡŒ, Ρ‚ΠΎ получится бСсконСчный Ρ†ΠΈΠΊΠ».

done


exit 0

Если Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ select список in list Π½Π΅ Π·Π°Π΄Π°Π½, Ρ‚ΠΎ Π² качСствС списка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ( [email protected]), ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это с ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ†ΠΈΠΊΠ»Π°

for variable [in list]

Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ Π·Π°Π΄Π°Π½ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-30. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мСню с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ select Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

#!/bin/bash


PS3='Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ ΠΎΠ²ΠΎΡ‰: '


echo


choice_of()

{

select vegetable

# список Π²Ρ‹Π±ΠΎΡ€Π° [in list] отсутствуСт, поэтому 'select' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

do

echo

echo "Π’Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ $vegetable."

echo ";-))"

echo

break

done

}


choice_of Π±ΠΎΠ±Ρ‹ рис ΠΌΠΎΡ€ΠΊΠΎΠ²ΡŒ рСдис Ρ‚ΠΎΠΌΠ°Ρ‚ ΡˆΠΏΠΈΠ½Π°Ρ‚

# $1 $2 $3 $4 $5 $6

# ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° списка Π²Ρ‹Π±ΠΎΡ€Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ choice_of()


exit 0

Π‘ΠΌ. Ρ‚Π°ΠΊ ΠΆΠ΅ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 34-3.


Π“Π»Π°Π²Π° 11. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

ВнутрСнняя ΠΊΠΎΠΌΠ°Π½Π΄Π° -- это ΠΊΠΎΠΌΠ°Π½Π΄Π°, которая встроСна нСпосрСдствСнно Π² Bash. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ встроСнными Π»ΠΈΠ±ΠΎ ΠΈΠ· сообраТСний ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ -- встроСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстрСС, Ρ‡Π΅ΠΌ внСшниС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ процСссС, Π»ΠΈΠ±ΠΎ ΠΈΠ·-Π·Π° нСобходимости прямого доступа ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ структурам ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

ДСйствиС, ΠΊΠΎΠ³Π΄Π° какая Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ сама командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ (ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚) Π½ΠΎΠ²Ρ‹ΠΉ подпроцСсс, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ Π»ΠΈΠ±ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ, называСтся Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ΠΌ (forking) процСсса. Новый процСсс называСтся "Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ" (ΠΈΠ»ΠΈ "ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ"), Π° ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠΉ Π΅Π³ΠΎ процСсс -- "Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ" (ΠΈΠ»ΠΈ "ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ"). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ -- ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, встроСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Bash, ΠΏΡ€ΠΈ исполнСнии Π²Π½ΡƒΡ‚Ρ€ΠΈ сцСнария, Π½Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ подпроцСсс, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ созданию Π½ΠΎΠ²ΠΎΠ³ΠΎ подпроцСсса.

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ внСшниС Π°Π½Π°Π»ΠΎΠ³ΠΈ. НапримСр, внутрСнняя ΠΊΠΎΠΌΠ°Π½Π΄Π° Bash -- echo ΠΈΠΌΠ΅Π΅Ρ‚ внСшний Π°Π½Π°Π»ΠΎΠ³ /bin/echo ΠΈ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ.

#!/bin/bash


echo "Π­Ρ‚Π° строка выводится Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ \"echo\"."

/bin/echo "А эта строка выводится внСшнСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ the /bin/echo."


ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово (keyword) -- это Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово, синтаксичСский элСмСнт (token) ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΈ фактичСски ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнтами синтаксиса языка ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти "for", "while", "do", "!", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ (ΠΈΠ»ΠΈ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ) словами. Подобно встроСнным ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ТСстко Π·Π°ΡˆΠΈΡ‚Ρ‹ Π² Bash, Π½ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ встроСнных ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, хотя ΠΏΡ€ΠΈ этом ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΈΡ… составной Ρ‡Π°ΡΡ‚ΡŒΡŽ[ 24 ].