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

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

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

# 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