# "ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ" -- ΡΡΠΎ ΠΎΠ±Π»Π°ΡΡΡ Π² ΠΠΠ£ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°
#+ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
# ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ -- ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ.
# ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ -- ΡΠ½Π΅ΡΠ³ΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΠΠ£, Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅,
# ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ.
#
# Π§Π΅ΠΌ Ρ ΠΎΡΠΎΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ?
# ΠΡΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠ°Π±Π»ΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ, Π½Π° ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΌ Π΄ΠΈΡΠΊΠ΅
#+ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π²ΡΡΠΎΠΊΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΠΠ£
# Π½Π΅ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΆΠ΅ΡΡΠΊΠΎΠΌΡ Π΄ΠΈΡΠΊΡ.
E_NON_ROOT_USER=70 # Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ root.
ROOTUSER_NAME=root
MOUNTPT=/mnt/ramdisk
SIZE=2000 # 2K Π±Π»ΠΎΠΊΠΎΠ² (ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ)
BLOCKSIZE=1024 # ΡΠ°Π·ΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠ° -- 1K (1024 Π±Π°ΠΉΡ)
DEVICE=/dev/ram0 # ΠΠ΅ΡΠ²ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ram
username=`id -nu`
if [ "$username" != "$ROOTUSER_NAME" ]
then
echo "Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ root."
exit $E_NON_ROOT_USER
fi
if [ ! -d "$MOUNTPT" ] # ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ,
then #+ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅, ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ Π·Π°ΠΏΡΡΠΊΠ°Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ
mkdir $MOUNTPT #+ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
fi
dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # ΠΡΠΈΡΡΠΈΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ.
mke2fs $DEVICE # Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ext2.
mount $DEVICE $MOUNTPT # Π‘ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ.
chmod 777 $MOUNTPT # Π‘Π΄Π΅Π»Π°ΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
# ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ, ΡΠΎΠ»ΡΠΊΠΎ root ΡΠΌΠΎΠΆΠ΅Ρ Π΅Π³ΠΎ ΠΎΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ.
echo "ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ \"$MOUNTPT\" Π³ΠΎΡΠΎΠ² ΠΊ ΡΠ°Π±ΠΎΡΠ΅."
# Π’Π΅ΠΏΠ΅ΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅.
# ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ -- ΡΡΠΎ ΡΠ½Π΅ΡΠ³ΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ! ΠΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Ρ ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π½Π° Π½Π΅ΠΌ,
#+ Π±ΡΠ΄ΡΡ ΡΡΠ΅ΡΡΠ½Ρ ΠΏΡΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ.
# ΠΡΠ»ΠΈ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄Π»Ρ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ, ΡΠΎ ΡΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅.
# ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΡΡΠΎΠ±Ρ Π²Π½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΈΡΠΊ, Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ.
# ΠΡΠΎΡΡΠΎΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ /mnt/ramdisk, Π±Π΅Π· Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
exit 0
ΠΠ»Π°Π²Π° 29. ΠΡΠ»Π°Π΄ΠΊΠ° ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π²
ΠΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Bash Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°, ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄Π°ΠΆΠ΅ ΠΊΠ°ΠΊΠΈΡ Π»ΠΈΠ±ΠΎ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ[ 59 ]. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΈ ΡΠ°ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅.
ΠΡΠΈΠΌΠ΅Ρ 29-1. Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΡΠΈΠ±ΠΊΡ
#!/bin/bash
# ex74.sh
# ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠΈΠ±ΠΊΡ.
a=37
if [$a -gt 27 ]
then
echo $a
fi
exit 0
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅:
./ex74.sh: [37: command not found
Π§ΡΠΎ Π² ΡΡΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ (ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° if)?
ΠΡΠΈΠΌΠ΅Ρ 29-2. ΠΡΠΎΠΏΡΡΠ΅Π½ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ
#!/bin/bash
# missing-keyword.sh:
# ΠΠ°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ, ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ?
for a in 1 2 3
do
echo "$a"
# done # ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ 'done' Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ.
exit 0
ΠΠ° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅:
missing-keyword.sh: line 11: syntax error: unexpected end of file
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½ΠΎΠΌΠ΅Ρ Π½Π΅ ΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, Π° ΡΠΎΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Bash ΡΠΎΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ.
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊΠΈ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ.
Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ Π½Π΅ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ? ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²Π΅ΡΡΠΌΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡΠΈΠΌΠ΅Ρ 29-3. test24
#!/bin/bash
# ΠΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»ΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅
#+ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΡΠΎΠ±Π΅Π»Ρ.
# ΠΠΎ ΠΎΠ½ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎΡΠ΅ΠΌΡ?
badname=`ls | grep ' '`
# echo "$badname"
rm "$badname"
exit 0
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΎΡΠΈΠ±ΠΊΡ, ΡΠ°ΡΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ² ΡΡΡΠΎΠΊΡ echo "$badname". ΠΠ½ΡΡΡΡΠΊΡΠΈΡ echo ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², ΠΎΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ·Π½Π°ΡΡ -- Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠΎ, ΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° rm "$badname" Π½Π΅ Π΄Π°Π΅Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $badname Π²Π·ΡΡΠ° Π² ΠΊΠ°Π²ΡΡΠΊΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, rm ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ (Ρ.Π΅. ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° ΠΈΠΌΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°). Π§Π°ΡΡΠΈΡΠ½ΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Π° Π·Π° ΡΡΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠ°Π²ΡΡΠ΅ΠΊ Π²ΠΎΠΊΡΡΠ³ $badname ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $IFS ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, IFS=$'\n'. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡ Π·Π°Π΄Π°ΡΡ.
# ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π² ΡΡΠΈΡ ΠΈΠΌΠ΅Π½Π°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΏΡΠΎΠ±Π΅Π»Ρ.
rm *\ *
rm *" "*
rm *' '*
# Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.
Π ΠΎΠ±ΡΠΈΡ ΡΠ΅ΡΡΠ°Ρ , ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅
1. "ΡΡΠΏΠ»ΡΡ" ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΎ "ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ " ΠΈΠ»ΠΈ
2. Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ).
3. Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ, Π΄Π΅Π»Π°ΡΡ ΡΠΎ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΎΠΌΠ±Π°).
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ Π½Π΅ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π²
1. ΠΊΠΎΠΌΠ°Π½Π΄Π° echo, Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΠΊΠ°Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Ρ ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
2. ΠΊΠΎΠΌΠ°Π½Π΄Π°-ΡΠΈΠ»ΡΡΡ tee, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ .
3. ΠΊΠ»ΡΡΠΈ -n -v -x
sh -n scriptname -- ΠΏΡΠΎΠ²Π΅ΡΠΈΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Ρ ΡΠ°ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΉ. Π’ΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ, Π²ΡΡΠ°Π²ΠΈΠ² Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ set -n ΠΈΠ»ΠΈ set -o noexec. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΡΠ²Π»Π΅Π½Ρ ΡΠ°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.
sh -v scriptname -- Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°. Π’ΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ, Π²ΡΡΠ°Π²ΠΈΠ² Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ set -v ΠΈΠ»ΠΈ set -o verbose.
ΠΠ»ΡΡΠΈ -n ΠΈ -v ΠΌΠΎΠ³ΡΡ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ: sh -nv scriptname.
sh -x scriptname -- Π²ΡΠ²ΠΎΠ΄ΠΈΡ, Π² ΠΊΡΠ°ΡΠΊΠΎΠΉ ΡΠΎΡΠΌΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π’ΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ, Π²ΡΡΠ°Π²ΠΈΠ² Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ set -x ΠΈΠ»ΠΈ set -o xtrace.
ΠΡΡΠ°Π²ΠΈΠ² Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ set -u ΠΈΠ»ΠΈ set -o nounset, Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ unbound variable Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π½Π΅ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
4. Π€ΡΠ½ΠΊΡΠΈΡ "assert", ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΠΊΠ°Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ. (ΠΡΠ° ΠΈΠ΄Π΅Ρ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½Π° ΠΈΠ· ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C.)
ΠΡΠΈΠΌΠ΅Ρ 29-4. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ»ΠΎΠ²ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ "assert"
#!/bin/bash
# assert.sh
assert () # ΠΡΠ»ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ,
{ #+ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
E_PARAM_ERR=98
E_ASSERT_FAILED=99
if [ -z "$2" ] # ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
then
return $E_PARAM_ERR
fi
lineno=$2
if [ ! $1 ]
then
echo "Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ: \"$1\""
echo "Π€Π°ΠΉΠ»: \"$0\", ΡΡΡΠΎΠΊΠ°: $lineno"
exit $E_ASSERT_FAILED
# else
# return
# ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ.
fi
}
a=5
b=4
condition="$a -lt $b" # Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ.
# ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ "condition"
#+ Π½Π° ΡΡΠΎ Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈ
#+ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ -- ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
assert "$condition" $LINENO
# Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ.
# ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
# ...
echo "ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ."
# ...
# ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
# ...
exit 0
5. ΠΠΎΠ²ΡΡΠΊΠ° Π½Π° Π²ΡΡ ΡΠΎ Π² ΡΡΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ (ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²ΠΎΠ΄Π΅.
ΠΠΎΠΌΠ°Π½Π΄Π° exit, Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΡΠΈΠ³Π½Π°Π» 0, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ, Ρ.Π΅. -- ΡΠ°ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΉ[ 60 ]. Π§Π°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΏΠΎ Π²ΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ Π²ΡΠ΄Π°ΡΡ "ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠΊΡ" ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π»ΠΎΠ²ΡΡΠ΅ΠΊ Π½Π° ΡΠΈΠ³Π½Π°Π»Ρ
trap
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π°; ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅.
Π‘ΠΈΠ³Π½Π°Π» (signal) -- ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΡΠ΄ΡΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ±ΡΠ΄ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΠΎΠ±ΡΡΠ½ΠΎ -- Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΆΠ°ΡΠΈΠ΅ Π½Π° Control-C, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Π° SIGINT, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
trap '' 2
# ΠΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ 2 (Control-C), Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ.
trap 'echo "Control-C disabled."' 2
# Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° Control-C.
ΠΡΠΈΠΌΠ΅Ρ 29-5. ΠΠΎΠ²ΡΡΠΊΠ° Π½Π° Π²ΡΡ ΠΎΠ΄Π΅
#!/bin/bash
trap 'echo Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ --- a = $a b = $b' EXIT
# EXIT -- ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Π°, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ.
a=39
b=36
exit 0
# ΠΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ 'exit',
# ΡΠΎ ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ,
# ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ "Π²ΡΡ ΠΎΠ΄" ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΡΠΈΠΌΠ΅Ρ 29-6. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° Control-C