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

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

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

#!/bin/bash

# logon.sh: Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ, написаный "Π½Π° ΡΠΊΠΎΡ€ΡƒΡŽ Ρ€ΡƒΠΊΡƒ", ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ Π² Ρ€Π΅ΠΆΠΈΠΌ on-line.


TRUE=1

LOGFILE=/var/log/messages

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: $LOGFILE Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (chmod 644 /var/log/messages).

TEMPFILE=temp.$$

# "УникальноС" имя для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π³Π΄Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π² ΠΈΠΌΠ΅Π½ΠΈ -- это pid процСсса-сцСнария.

KEYWORD=address

# ΠŸΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅, Π² Ρ„Π°ΠΉΠ» /var/log/messages,

# добавляСтся строка "remote IP address xxx.xxx.xxx.xxx"

ONLINE=22

USER_INTERRUPT=13

CHECK_LINES=100

# ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ провСряСмых строк.


trap 'rm -f $TEMPFILE; exit $USER_INTERRUPT' TERM INT

# Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΠ³Π΄Π° сцСнарий Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ control-c.


echo


while [ $TRUE ] #БСсконСчный Ρ†ΠΈΠΊΠ».

do

tail -$CHECK_LINES $LOGFILE> $TEMPFILE

# ПослСдниС 100 строк ΠΈΠ· систСмного ΠΆΡƒΡ€Π½Π°Π»Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

# Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚.ΠΊ. новСйшиС вСрсии ядСр Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ сообщСний ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅.

search=`grep $KEYWORD $TEMPFILE`

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ„Ρ€Π°Π·Ρ‹ "address",

# ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π΅.


if [ ! -z "$search" ] # ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Ρ‚.ΠΊ. пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

then

echo "On-line"

rm -f $TEMPFILE # Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

exit $ONLINE

else

echo -n "." # ΠΊΠ»ΡŽΡ‡ -n подавляСт Π²Ρ‹Π²ΠΎΠ΄ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки,

# Ρ‚Π°ΠΊ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ строку Ρ‚ΠΎΡ‡Π΅ΠΊ.

fi


sleep 1

done


# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ KEYWORD

# Π½Π° "Exit", Ρ‚ΠΎ сцСнарий ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для контроля

# Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° (logoff).


exit 0


# Nick Drage ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:


while true

do ifconfig ppp0 | grep UP 1> /dev/null && echo "соСдинСниС установлСно" && exit 0

echo -n "." # ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΎΡ‡Π΅ΠΊ (.....), ΠΏΠΎΠΊΠ° соСдинСниС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ установлСно.

sleep 2

done


# ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: НаТатия Control-C ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСдостаточным, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ этот процСсс.

# (Π’ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° экран.)

# Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅: Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ этот нСдостаток.


# Stephane Chazelas ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ:


CHECK_INTERVAL=1


while ! tail -1 "$LOGFILE" | grep -q "$KEYWORD"

do echo -n .

sleep $CHECK_INTERVAL

done

echo "On-line"


# Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅: НайдитС ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны

# ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ².

АргумСнт DEBUG, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ trap, заставляСт сцСнарий Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ дСйствиС послС выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для трассировки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 29-7. Врассировка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

#!/bin/bash


trap 'echo "VARIABLE-TRACE> $LINENO: \$variable = \"$variable\""' DEBUG

# Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ послС исполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.


variable=29


echo "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ \"\$variable\" ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° числом $variable."


let "variable *= 3"

echo "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"\$variable\" ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ Π² 3 Ρ€Π°Π·Π°."


# ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ "trap 'commands' DEBUG" ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ

# ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ слоТных скриптов,

# ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ мноТСства инструкций "echo $variable"

# ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ достаточно большого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.


# Бпасибо Stephane Chazelas.


exit 0


ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ trap '' SIGNAL (Π΄Π²Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ) -- Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ SIGNAL для ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части сцСнария. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ trap SIGNAL -- восстанавливаСт дСйствиС сигнала SIGNAL. Π­Ρ‚ΠΈ конструкции ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ критичСских участков сцСнария ΠΎΡ‚ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прСрывания.

trap '' 2 # Π‘ΠΈΠ³Π½Π°Π» 2 (Control-C) -- Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½.

command

command

command

trap 2 # Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° Control-C



Π“Π»Π°Π²Π° 30. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (ΠΊΠ»ΡŽΡ‡ΠΈ)

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -- это Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ (ΠΎΠΏΡ†ΠΈΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ влияниС Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сцСнария ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

Команда set позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ сцСнария. Π’ Ρ‚ΠΎΠΌ мСстС сцСнария, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π° ΠΈΠ»ΠΈ иная опция вступила Π² силу, Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ set -o option-name, ΠΈΠ»ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ -- set -option-abbrev. Π­Ρ‚ΠΈ Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ записи ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΠΏΠΎ своСму Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ.

#!/bin/bash


set -o verbose

# Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… исполнСниСм.


#!/bin/bash


set -v

# Π˜ΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅.


Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ дСйствиС Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ, слСдуСт Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ set +o option-name, ΠΈΠ»ΠΈ set +option-abbrev.

#!/bin/bash


set -o verbose

# Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… исполнСниСм.

command

...

command


set +o verbose

# Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… исполнСниСм.

command

# ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ выводится.


set -v

# Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… исполнСниСм.

command

...

command


set +v

# Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… исполнСниСм.

command


exit 0


Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ установки ΠΎΠΏΡ†ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ сцСнария (Π² строкС sha-bang) -- #!.

#!/bin/bash -x

#

# Π”Π°Π»Π΅Π΅ слСдуСт тСкст сцСнария.


Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, ΠΏΡ€ΠΈ запускС сцСнария. НСкоторыС ΠΈΠ· ΠΎΠΏΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -i -- ΠΊΠ»ΡŽΡ‡ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта.

bash -v script-name

bash -o verbose script-name

НиТС приводится список Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠ°ΠΊ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Ρ‚Π°ΠΊ ΠΈ Π² сокращСнной.

Π’Π°Π±Π»ΠΈΡ†Π° 30-1. ΠšΠ»ΡŽΡ‡ΠΈ Bash

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ имя ПолноС имя ОписаниС -C noclobber ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Ρ„Π°ΠΉΠ»Π° Π² опСрациях пСрСнаправлСния Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π΅ распространяСтся Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ (ΠΊΠ°Π½Π°Π»Ρ‹) -- >|) -D (Π½Π΅Ρ‚) Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список строк Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ символ $, сам сцСнарий Π½Π΅ исполняСтся -a allexport Экспорт всСх, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² сцСнарии, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… -b notify Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ (job) (довольно Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² сцСнариях) -c ... (Π½Π΅Ρ‚) Π§ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· ... -f noglob ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² (globbing) Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° -i interactive Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ запускаСтся Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ -p privileged Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ запускаСтся ΠΊΠ°ΠΊ "suid" (остороТно!) -r restricted Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ запускаСтся Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (см. Π“Π»Π°Π²Π° 20). -u nounset ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ обращСния ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ сцСнария -v verbose Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° stdout ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ исполнСна -x xtrace Подобна -v, Π½ΠΎ выполняСт подстановку ΠΊΠΎΠΌΠ°Π½Π΄ -e errexit ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ сцСнария ΠΏΡ€ΠΈ появлСнии ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΆΠ΅ ошибки (ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ) -n noexec Π§ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· сцСнария, Π½ΠΎ Π½Π΅ исполняСт ΠΈΡ… (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса) -s stdin Π§ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с устройства stdin -t (Π½Π΅Ρ‚) Π’Ρ‹Ρ…ΠΎΠ΄ послС исполнСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ - (Π½Π΅Ρ‚) ΠšΠΎΠ½Π΅Ρ† списка ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (ΠΎΠΏΡ†ΠΈΠΉ), ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. -- (Π½Π΅Ρ‚) Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΎΠΏΡ†ΠΈΠΈ (-).

Π“Π»Π°Π²Π° 31. Π¨ΠΈΡ€ΠΎΠΊΠΎ распространСнныС ошибки

Turandot: Gli enigmi sono tre, la morte una!

Caleph: No, no! Gli enigmi sono tre, una la vita!

Puccini

ИспользованиС Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… слов ΠΈ слуТСбных символов Π² качСствС ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

case=value0 # ΠœΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

23skidoo=value1 # ВоТС самоС.

# ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Ρ†ΠΈΡ„Ρ€, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ.

# Если имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с символа подчСркивания: _23skidoo=value1, Ρ‚ΠΎ это Π½Π΅ считаСтся ошибкой.


# Однако... Ссли имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ состоит ΠΈΠ· СдинствСнного символа подчСркивания, Ρ‚ΠΎ это ошибка.

_=25

echo $_ # $_ -- это внутрСнняя пСрСмСнная.


xyz((!*=value2 # Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.


ИспользованиС дСфиса, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… символов, Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

var-1=23

# ВмСсто Ρ‚Π°ΠΊΠΎΠΉ записи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ 'var_1'.


ИспользованиС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ сцСнарий Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ для понимания.

do_something ()

{

echo "Π­Ρ‚Π° функция Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с \"$1\"."

}


do_something=do_something


do_something do_something


# ВсС это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π½ΠΎ слишком ΡƒΠΆ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎ.


ИспользованиС Π»ΠΈΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, Bash вСсьма ΠΏΡ€ΠΈΠ²Π΅Ρ€Π΅Π΄Π»ΠΈΠ² ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌ.