#!/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 Π²Π΅ΡΡΠΌΠ° ΠΏΡΠΈΠ²Π΅ΡΠ΅Π΄Π»ΠΈΠ² ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌ.