# agram.sh: ΠΠ³ΡΡ Ρ Π°Π½Π°Π³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ.
# ΠΠΎΠΈΡΠΊ Π°Π½Π°Π³ΡΠ°ΠΌΠΌ...
LETTERSET=etaoinshrdlu
anagram "$LETTERSET" | # ΠΠ°ΠΉΡΠΈ Π²ΡΠ΅ Π°Π½Π°Π³ΡΠ°ΠΌΠΌΡ Π² Π½Π°Π±ΠΎΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²...
grep '.......' | # ΡΠΎΡΡΠΎΡΡΠΈΠ΅, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ· 7 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²,
grep '^is' | # Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ 'is'
grep -v 's$' | # ΠΈΡΠΊΠ»ΡΡΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
grep -v 'ed$' # ΠΈ Π³Π»Π°Π³ΠΎΠ»Ρ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
# ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ° "anagram"
#+ ΠΊΠΎΡΠΎΡΠ°Ρ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠ°Π² ΠΏΠ°ΠΊΠ΅ΡΠ° "yawl" , ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ Π°Π²ΡΠΎΡΠΎΠΌ.
# http://ibiblio.org/pub/Linux/libs/yawl-0.2.tar.gz
exit 0 # ΠΠΎΠ½Π΅Ρ.
bash$ sh agram.sh
islander
isolate
isolead
isotheral
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΠΡΠΈΠΌΠ΅Ρ 27-2, ΠΡΠΈΠΌΠ΅Ρ 12-18 ΠΈ ΠΡΠΈΠΌΠ΅Ρ A-10.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π»ΠΎΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ "Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ". Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ 17-10.
ΠΠΎΠΏΡΡΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΈΠ»ΠΈΡΡ ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅, Π³Π΄Π΅ ΡΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠ°ΡΠ½Π°. ΠΠ»Ρ ΠΎΠ±Ρ ΠΎΠ΄Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ whatis.
CMD=command1 # ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
PlanB=command2 # ΠΠ°ΠΏΠ°ΡΠ½ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
command_test=$(whatis "$CMD" | grep 'nothing appropriate')
# ΠΡΠ»ΠΈ 'command1' Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠΎ 'whatis' Π²Π΅ΡΠ½Π΅Ρ
#+ "command1: nothing appropriate."
#==> ΠΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: ΠΡΠ΄ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ! ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ whatis
#==> ΡΠΎ Π²ΡΠ²ΠΎΠ΄ ΠΎΡ Π½Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π·Π΄Π΅ΡΡ ('nothing appropriate')
if [[ -z "$command_test" ]] # ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ ΡΡΠΈΠ»ΠΈΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅.
then
$CMD option1 option2 # ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
else # ΠΠ½Π°ΡΠ΅,
$PlanB #+ Π·Π°ΠΏΡΡΡΠΈΡΡ command2 (Π·Π°ΠΏΠ°ΡΠ½ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ).
fi
ΠΠΎΠΌΠ°Π½Π΄Π° run-parts ΡΠ΄ΠΎΠ±Π½Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Ρ cron ΠΈΠ»ΠΈ at.
ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΡΠ½Π°Π±Π΄ΠΈΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΠΎΠΌ X-Window. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ Xscript, Xmenu ΠΈ widtools. ΠΡΠ°Π²Π΄Π°, ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π°, ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ. ΠΠ°ΡΠΎ widtools ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π΄Π΅ΡΡ.
ΠΠ°ΠΊΠ΅Ρ widtools (widget tools) ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ XForms. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π³ΠΊΠ° ΠΏΠΎΠ΄ΠΏΡΠ°Π²ΠΈΡΡ Makefile, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π½Π° ΡΠΈΠΏΠΈΡΠ½ΠΎΠΉ Linux-ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠΎ Ρ ΡΠΆΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎ, ΡΡΠΎ ΡΡΠΈ ΠΈΠ· ΡΠ΅ΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ :-(( (segfault).
ΠΠ»Ρ ΠΏΠΎΡΡΠΎΡΠΎΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Tk, ΠΈΠ»ΠΈ wish (Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠ° Π½Π°Π΄ Tcl), PerlTk (Perl Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Tk), tksh (ksh Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Tk), XForms4Perl (Perl Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ XForms), Gtk-Perl (Perl Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Gtk) ΠΈΠ»ΠΈ PyQt (Python Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Qt).
33.8. ΠΡΠΎΠ±Π»Π΅ΠΌΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
Π£ΠΌΠ΅ΡΡΠ½ΡΠΌ Π±ΡΠ΄Π΅Ρ Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΡ ΠΎ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡΠΌΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡΠΌΠΈ. Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ΅ΡΠ²Ρ, ΡΡΠΎΡΠ½Π° ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π²ΠΈΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π΅ ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π΄ΠΎΠ²Π΅ΡΡΠ΅ΡΠ΅, ΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ Π΅Π³ΠΎ Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΌΠΈ root ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠΉΡΠ΅ Π²ΡΡΠ°Π²Π»ΡΡΡ Π΅Π³ΠΎ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Π² /etc/rc.d, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π±Π΅Π·Π²ΡΠ΅Π΄Π΅Π½ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈΠ· Bell Labs ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ M. Douglas McIlroy, Tom Duff, ΠΈ Fred Cohen ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΠΈΡΡΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, ΠΈ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ².[ 63 ]
ΠΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·ΡΡΠ°ΡΡ ΡΠ·ΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ. Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π·Π»ΠΎΠΌΠ° ΠΈ/ΠΈΠ»ΠΈ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
33.9. ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ
ΠΡΠ° ΠΊΠ½ΠΈΠ³Π° Π΄Π΅Π»Π°Π΅Ρ ΡΠΏΠΎΡ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Bash, Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ GNU/Linux. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π΄Π΅ΡΡ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠ΅ΠΊ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ sh ΠΈ ksh.
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠ΅ΠΊ ΡΡΡΠ΅ΠΌΡΡΡΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ POSIX 1003.2. ΠΡΠ·ΡΠ²Π°Ρ Bash Ρ ΠΊΠ»ΡΡΠΎΠΌ --posix, ΠΈΠ»ΠΈ Π²ΡΡΠ°Π²Π»ΡΡ set -o posix Π² Π½Π°ΡΠ°Π»ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Bash ΠΎΡΠ΅Π½Ρ Π±Π»ΠΈΠ·ΠΊΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎΠΌΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ. ΠΠΎ, Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π΄Π»Ρ Bash, Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ksh, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Ρ.ΠΊ. Chet Ramey ΠΏΠ΅ΡΠ΅Π½Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ, ΠΏΡΠΈΡΡΡΠΈΠ΅ ksh, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Bash.
Π ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ Π²Π΅ΡΡΠΈΡΡ UNIX, ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ GNU-Π²Π΅ΡΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ Π²ΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΈΠ»ΠΈΡΡ GNU, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ²ΠΎΠ΅ΠΌ, Π·Π°ΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π² UNIX. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Caldera Π΄Π°Π»Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Π΅ΡΡΠΈΠΉ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡ UNIX, ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΠ»ΡΡ.
Bash ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ, Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ Bourne shell. Π‘ΡΠ΅Π΄ΠΈ Π½ΠΈΡ :
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π°
ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½ΠΎΡΠ°ΡΠΈΠΈ $( )
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ
ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Bash
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Bash, Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π² Bash F.A.Q..
33.10. Π‘ΡΠ΅Π½Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄ Windows
ΠΠ°ΠΆΠ΅ ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ, Π½Π΅ UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, Π° ΠΏΠΎΡΠΎΠΌΡ -- Π½Π°ΠΉΡΠΈ Π΄Π»Ρ ΡΠ΅Π±Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Π² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅. ΠΠ°ΠΊΠ΅ΡΡ Cygwin ΠΎΡ Cygnus, ΠΈ MKS utilities ΠΎΡ Mortice Kern Associates, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ Windows Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
ΠΠ»Π°Π²Π° 34. Bash, Π²Π΅ΡΡΠΈΡ 2
Π’Π΅ΠΊΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ Bash, ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ -- 2.XX.Y.
bash$ echo $BASH_VERSION
2.05.8(1)-release
Π ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Bash Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-ΠΌΠ°ΡΡΠΈΠ²Ρ[ 64 ], ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠ»ΡΡΡΠ΅Π½ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΡ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
ΠΡΠΈΠΌΠ΅Ρ 34-1. Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ
#!/bin/bash
# "Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅" ΡΡΡΠΎΠΊ (String expansion).
# ΠΠ²Π΅Π΄Π΅Π½ΠΎ Π² Bash, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 2.
# Π‘ΡΡΠΎΠΊΠΈ Π²ΠΈΠ΄Π° $'xxx'
# ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
echo $'ΠΠ²ΠΎΠ½ΠΎΠΊ Π·Π²Π΅Π½ΠΈΡ 3 ΡΠ°Π·Π° \a \a \a'
echo $'Π’ΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΠΎΡΠΌΠ°ΡΠ° \f \f \f'
echo $'10 Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊ \n\n\n\n\n\n\n\n\n\n'
exit 0
ΠΡΠΈΠΌΠ΅Ρ 34-2. ΠΠΎΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ -- Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
#!/bin/bash
# ΠΠΎΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
a=letter_of_alphabet
letter_of_alphabet=z
echo "a = $a" # ΠΡΡΠΌΠ°Ρ ΡΡΡΠ»ΠΊΠ°.
echo "Now a = ${!a}" # ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ ΡΡΡΠ»ΠΊΠ°.
# Π€ΠΎΡΠΌΠ° Π·Π°ΠΏΠΈΡΠΈ ${!variable} Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΡΠ°ΡΠΎΠΉ "eval var1=\$$var2"
echo
t=table_cell_3
table_cell_3=24
echo "t = ${!t}" # t = 24
table_cell_3=387
echo "ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ t ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π½Π° ${!t}" # 387
# Π’Π΅ΠΏΠ΅ΡΡ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°,
# ΠΈΠ»ΠΈ Π΄Π»Ρ ΡΠΌΡΠ»ΡΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
# ΠΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ.
exit 0
ΠΡΠΈΠΌΠ΅Ρ 34-3. ΠΡΠΎΡΡΠ°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΡ ΡΡΡΠ»ΠΎΠΊ
#!/bin/bash
# resistor-inventory.sh
# ΠΡΠΎΡΡΠ°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΡ ΡΡΡΠ»ΠΎΠΊ.
# ============================================================== #
# ΠΠ°Π½Π½ΡΠ΅
B1723_value=470 # ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅ (ΠΠΌ)
B1723_powerdissip=.25 # ΡΠ°ΡΡΠ΅ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΌΠΎΡΠ½ΠΎΡΡΡ (ΠΡ)
B1723_colorcode="ΠΆΠ΅Π»ΡΡΠΉ-ΡΠΈΠΎΠ»Π΅ΡΠΎΠ²ΡΠΉ-ΠΊΠΎΡΠΈΡΠ½Π΅Π²ΡΠΉ" # ΡΠ²Π΅ΡΠΎΠ²Π°Ρ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ°
B1723_loc=173 # Π³Π΄Π΅
B1723_inventory=78 # ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ (ΡΡ)
B1724_value=1000
B1724_powerdissip=.25
B1724_colorcode="ΠΊΠΎΡΠΈΡΠ½Π΅Π²ΡΠΉ-ΡΠ΅ΡΠ½ΡΠΉ-ΠΊΡΠ°ΡΠ½ΡΠΉ"
B1724_loc=24N
B1724_inventory=243
B1725_value=10000
B1725_powerdissip=.25
B1725_colorcode="ΠΊΠΎΡΠΈΡΠ½Π΅Π²ΡΠΉ-ΡΠ΅ΡΠ½ΡΠΉ-ΠΎΡΠ°Π½ΠΆΠ΅Π²ΡΠΉ"
B1725_loc=24N
B1725_inventory=89
# ============================================================== #
echo
PS3='ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π½ΠΎΠΈΠ΅Ρ: '
echo
select catalog_number in "B1723" "B1724" "B1725"
do
Inv=${catalog_number}_inventory
Val=${catalog_number}_value
Pdissip=${catalog_number}_powerdissip
Loc=${catalog_number}_loc
Ccode=${catalog_number}_colorcode
echo
echo "ΠΠΎΠΌΠ΅Ρ ΠΏΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ $catalog_number:"
echo "ΠΠΌΠ΅Π΅ΡΡΡ Π² Π½Π°Π»ΠΈΡΠΈΠΈ ${!Inv} ΡΡ. [${!Val} ΠΠΌ / ${!Pdissip} ΠΡ]."
echo "ΠΠ°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π»ΠΎΡΠΊΠ΅ # ${!Loc}."
echo "Π¦Π²Π΅ΡΠΎΠ²Π°Ρ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ°: \"${!Ccode}\"."
break
done
echo; echo
# Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅:
# ----------
# ΠΠ΅ΡΠ΅Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΌΠ°ΡΡΠΈΠ²Ρ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΡ ΡΡΡΠ»ΠΎΠΊ.
# ΠΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΡΠΉ?
# ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
# ----------
# Π―Π·ΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ,
#+ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
# ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅
#+ ΡΠ°Π·Π²ΠΈΡΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ,
#+ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ C++ ΠΈΠ»ΠΈ Java (ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Perl).
exit 0
ΠΡΠΈΠΌΠ΅Ρ 34-4. ΠΠ°ΡΡΠΈΠ²Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Ρ ΠΈΡΡΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π·Π΄Π°ΡΠΈ ΠΊΠΎΠ»ΠΎΠ΄Ρ ΠΊΠ°ΡΡ Π² ΡΠ΅ΡΡΡΠ΅ ΡΡΠΊΠΈ
#!/bin/bash
# ΠΠ° ΡΡΠ°ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π²ΡΡΠ°Π²ΠΈΡΡ #!/bin/bash2.
# ΠΠ°ΡΡΡ:
# ΡΠ°Π·Π΄Π°ΡΠ° Π² ΡΠ΅ΡΡΡΠ΅ ΡΡΠΊΠΈ.
UNPICKED=0
PICKED=1
DUPE_CARD=99
LOWER_LIMIT=0