# ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ${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 ].