wait # ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠ΅ΠΊ.
diff list123 list456
ΠΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π²/ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° "|", Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ls -al | (command).
ΠΠ»ΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π°ΠΏΡΡΠΊΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
{ command1; command2; command3; ... }
ΠΠ»Π°Π²Π° 20. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ
ΠΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ
ΠΠ°ΠΏΡΡΠΊ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠ° ΠΌΠ΅ΡΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π·Π°ΠΏΡΡΡΠΈΠ²ΡΠ΅Π³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ±Π° ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Π½Π΅ΡΡΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ.
Π ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° cd -- ΡΠΌΠ΅Π½Π° ΡΠ΅ΠΊΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
ΠΠ°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ $PATH, $SHELL, $BASH_ENV ΠΈ $ENV.
ΠΠ°ΠΏΠ΅ΡΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $SHELLOPTS.
ΠΠ°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠ°ΠΏΡΠ΅ΡΠ΅Π½ Π²ΡΠ·ΠΎΠ² ΡΡΠΈΠ»ΠΈΡ, Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» "ΡΠ»ΡΡ" (/).
ΠΠ°ΠΏΡΠ΅ΡΠ΅Π½ Π²ΡΠ·ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ exec Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΠ°ΠΏΡΠ΅ΡΠ΅Π½ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠ°ΠΏΡΠ΅ΡΠ΅Π½ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°.
ΠΡΠΈΠΌΠ΅Ρ 20-1. ΠΠ°ΠΏΡΡΠΊ ΡΡΠ΅Π½Π°ΡΠΈΡ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
#!/bin/bash
# ΠΡΠ»ΠΈ sha-bang Π·Π°Π΄Π°ΡΡ Π² ΡΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅: "#!/bin/bash -r"
# ΡΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠ°.
echo
echo "Π‘ΠΌΠ΅Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°."
cd /usr/local
echo "Π’Π΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³: `pwd`"
echo "ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π² Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³."
cd
echo "Π’Π΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³: `pwd`"
echo
# ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ, Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
set -r
# set --restricted ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡ.
echo "==> ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ. <=="
echo
echo
echo "ΠΠΎΠΏΡΡΠΊΠ° ΡΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅."
cd ..
echo "Π’Π΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΎΡΡΠ°Π»ΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ: `pwd`"
echo
echo
echo "\$SHELL = $SHELL"
echo "ΠΠΎΠΏΡΡΠΊΠ° ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅."
SHELL="/bin/ash"
echo
echo "\$SHELL= $SHELL"
echo
echo
echo "ΠΠΎΠΏΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅."
ls -l /usr/bin > bin.files
ls -l bin.files # ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΉΡΠΈ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΡΠ°Π»ΠΈΡΡ ΡΠΎΠ·Π΄Π°ΡΡ.
echo
exit 0
ΠΠ»Π°Π²Π° 21. ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² -- ΡΡΠΎ Π°Π½Π°Π»ΠΎΠ³ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, dir_contents=`ls -al` ΠΈΠ»ΠΈ xref=$(grep word datafile). ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π²ΡΠ²ΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π° Π²Π²ΠΎΠ΄ Π΄ΡΡΠ³ΠΎΠ³ΠΎ (Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ -- Π΄ΡΡΠ³ΠΎΠΉ).
Π¨Π°Π±Π»ΠΎΠ½ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
ΠΠ½ΡΡΡΠΈ ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ
>(command)
<(command)
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠ΄Π΅ΡΡ, Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°ΠΉΠ»Ρ /dev/fd/<n>.[ 49 ]
ΠΠ΅ΠΆΠ΄Ρ ΠΊΡΡΠ³Π»ΠΎΠΉ ΡΠΊΠΎΠ±ΠΊΠΎΠΉ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ "<" ΠΈΠ»ΠΈ ">", Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ², Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
bash$ echo >(true)
/dev/fd/63
bash$ echo <(true)
/dev/fd/63
Bash ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°Π½Π°Π» Ρ Π΄Π²ΡΠΌΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ, --fIn ΠΈ fOut--. stdin ΠΊΠΎΠΌΠ°Π½Π΄Ρ true ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ ΠΊ fOut (dup2(fOut, 0)), Π·Π°ΡΠ΅ΠΌ Bash ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ /dev/fd/fIn Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π΅ echo. Π ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , Π³Π΄Π΅ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ ΡΠ°ΠΉΠ»Ρ /dev/fd/<n>, Bash ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. (Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.)
cat <(ls -l)
# Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ ls -l | cat
sort -k 9 <(ls -l /bin) <(ls -l /usr/bin) <(ls -l /usr/X11R6/bin)
# Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ 'bin', ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ².
# ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π° Π²Ρ ΠΎΠ΄ 'sort' ΠΏΠΎΠ΄Π°Π½Ρ ΡΡΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
diff <(command1) <(command2) # ΠΡΠ΄Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄.
tar cf >(bzip2 -c > file.tar.bz2) $directory_name
# ΠΡΠ·ΠΎΠ²Π΅Ρ "tar cf /dev/fd/?? $directory_name" ΠΈ Π·Π°ΡΠ΅ΠΌ "bzip2 -c > file.tar.bz2".
#
# ΠΠ·-Π·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ, ΠΏΡΠΈΡΡΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ Ρ /dev/fd/<n>,
# ΠΊΠ°Π½Π°Π» ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ.
#
# ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ ΡΠ°ΠΊ.
#
bzip2 -c < pipe > file.tar.bz2&
tar cf pipe $directory_name
rm pipe
# ΠΈΠ»ΠΈ
exec 3>&1
tar cf /dev/fd/4 $directory_name 4>&1 >&3 3>&- | bzip2 -c > file.tar.bz2 3>&-
exec 3>&-
# Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
# Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΈΠ· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° SuSE:
while read des what mask iface; do
# ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ...
done < <(route -n)
# Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π²ΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
while read des what mask iface; do
echo $des $what $mask $iface
done < <(route -n)
# ΠΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½:
# Kernel IP routing table
# Destination Gateway Genmask Flags Metric Ref Use Iface
# 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
# ΠΠ°ΠΊ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ S.C. -- Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ:
route -n |
while read des what mask iface; do # ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° (ΠΊΠ°Π½Π°Π»Π°).
echo $des $what $mask $iface
done # ΠΠ° ΡΠΊΡΠ°Π½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π²ΡΡΠ΅.
# ΠΠ΄Π½Π°ΠΊΠΎ, Ulrich Gayer ΠΎΡΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ...
#+ ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΈΠΊΠ» while Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅,
#+ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π½Π΅ Π²ΠΈΠ΄Π½Ρ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΠΈΠΊΠ»Π°, ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ ΠΊΠ°Π½Π°Π»Π°.
ΠΠ»Π°Π²Π° 22. Π€ΡΠ½ΠΊΡΠΈΠΈ
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ "Π½Π°ΡΡΠΎΡΡΠΈΠΌ" ΡΠ·ΡΠΊΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Bash ΡΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ ΠΎΡΡ ΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ -- ΡΡΠΎ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° "ΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΈΠΊ", ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΈΠΌΠ΅ΡΡΡΡ ΡΡΠ°ΡΡΠΊΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π³ΠΎΡΡ ΠΊΠΎΠ΄Π°.
function function_name { command... }
ΠΈΠ»ΠΈ
function_name () { command... }
ΠΡΠΎΡΠ°Ρ ΡΠΎΡΠΌΠ° Π·Π°ΠΏΠΈΡΠΈ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΡΠ΅ΡΠ΄ΡΡ C-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ (ΠΎΠ½Π° ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠ°Ρ).
ΠΠ°ΠΊ ΠΈ Π² ΡΠ·ΡΠΊΠ΅ C, ΡΠΊΠΎΠ±ΠΊΠ°, ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ°Ρ ΡΠ΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅.
function_name () { command... }
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ 22-1. ΠΡΠΎΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ
#!/bin/bash
funky ()
{
echo "ΠΡΠΎ ΠΎΠ±ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ."
} # Π€ΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
# ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ.
funky
exit 0
Π€ΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π² Bash Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ "ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ" ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² C.
f1
# ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ "f1" Π΅ΡΠ΅ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°.
declare -f f1 # ΠΡΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.
f1 # ΠΠΎ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ -- ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
# ΠΠ΄Π½Π°ΠΊΠΎ...
f1 ()
{
echo "ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ \"f2\" ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ \"f1\"."
f2
}
f2 ()
{
echo "Π€ΡΠ½ΠΊΡΠΈΡ \"f2\"."
}
f1 # Π€ΡΠ½ΠΊΡΠΈΡ "f2", ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠ΅ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ,
#+ Ρ ΠΎΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° Π½Π΅Π΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π²ΡΡΠ΅, Π΄ΠΎ Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ.
# ΠΡΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
# Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.
ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π°ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Ρ ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·Ρ ΠΎΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ.
f1 ()
{
f2 () # Π²Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ
{
echo "Π€ΡΠ½ΠΊΡΠΈΡ \"f2\", Π²Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ Π² \"f1\"."
}
}
f2 # ΠΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
# ΠΠ°ΠΆΠ΅ "declare -f f2" Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.
echo
f1 # ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΏΡΠΎΡΡΠΎΠΉ Π²ΡΠ·ΠΎΠ² "f1", Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ·ΠΎΠ² "f2".
f2 # Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π²ΡΠ·ΠΎΠ² "f2" Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ,
#+ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ "f2" Π±ΡΠ»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° "f1".
# Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠ°ΠΌΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ .
ls -l | foo() { echo "foo"; } # ΠΠΎΠΏΡΡΡΠΈΠΌΠΎ, Π½ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ.
if [ "$USER" = bozo ]
then
bozo_greet () # ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΎ Π² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅.
{
echo "ΠΡΠΈΠ²Π΅Ρ, Bozo!"
}
fi
bozo_greet # Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ bozo, Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
# ΠΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠΉ Π΄Π»Ρ ΡΠ΅Π±Ρ.
NO_EXIT=1 # Will enable function definition below.
[[ $NO_EXIT -eq 1 ]] && exit() { true; } # ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ "Π-ΡΠΏΠΈΡΠΎΠΊ".
# ΠΡΠ»ΠΈ $NO_EXIT ΡΠ°Π²Π½Π° 1, ΡΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ "exit ()".
# Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ, ΡΡΠ½ΠΊΡΠΈΡ "exit" ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ "exit".
exit # ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ "exit ()", Π° Π½Π΅ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° "exit".
# Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.
22.1. Π‘Π»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
function_name $arg1 $arg2
ΠΠΎΡΡΡΠΏ ΠΊ Π²Ρ ΠΎΠ΄Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ, Π² ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Ρ.Π΅. $1, $2 ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.