var1 = 23 # ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: 'var1=23'.
# Π Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Bash Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡ "var1" ΠΊΠ°ΠΊ ΠΈΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
# Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ "=" ΠΈ "23".
let c = $a - $b # ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: 'let c=$a-$b' ΠΈΠ»ΠΈ 'let "c = $a - $b"'
if [ $a -le 5] # ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: if [ $a -le 5 ]
# if [ "$a" -le 5 ] Π΅ΡΠ΅ Π»ΡΡΡΠ΅.
# [[ $a -le 5 ]] ΡΠΎΠΆΠ΅ Π²Π΅ΡΠ½ΠΎ.
ΠΡΠΈΠ±ΠΎΡΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ "Π½ΠΎΠ»Ρ". ΠΠ΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ "ΠΏΡΡΡΠΎΠ΅" (null) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ Π½ΠΎΠ»Ρ.
#!/bin/bash
echo "uninitialized_var = $uninitialized_var"
# uninitialized_var =
Π§Π°ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΡΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ = ΠΈ -eq. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ = ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π° -eq -- Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π».
if [ "$a" = 273 ] # ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΠ΅? $a -- ΡΡΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠ°?
if [ "$a" -eq 273 ] # ΠΡΠ»ΠΈ $a -- ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
# ΠΠ½ΠΎΠ³Π΄Π°, ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΊΠ° Π½ΠΈΠΊΠ°ΠΊ ΡΠ΅Π±Ρ Π½Π΅ ΠΏΡΠΎΡΠ²Π»ΡΠ΅Ρ.
# ΠΠ΄Π½Π°ΠΊΠΎ...
a=273.0 # ΠΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
if [ "$a" = 273 ]
then
echo "Π Π°Π²Π½Ρ."
else
echo "ΠΠ΅ ΡΠ°Π²Π½Ρ."
fi # ΠΠ΅ ΡΠ°Π²Π½Ρ.
# ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈ Π΄Π»Ρ a=" 273" ΠΈ a="0273".
# ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ "-eq" ΡΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ.
if [ "$a" -eq 273.0 ]
then
echo "a = $a'
fi # ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΎΡΠΈΠ±ΠΊΠ΅.
# test.sh: [: 273.0: integer expression expected
ΠΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» ΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
#!/bin/bash
# bad-op.sh
number=1
while [ "$number" < 5 ] # ΠΠ΅Π²Π΅ΡΠ½ΠΎ! Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ while [ "number" -lt 5 ]
do
echo -n "$number "
let "number += 1"
done
# ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅:
# bad-op.sh: 5: No such file or directory
ΠΠ½ΠΎΠ³Π΄Π°, Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ ([ ]), ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ°ΡΡ Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ. Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ 7-6, ΠΡΠΈΠΌΠ΅Ρ 16-4 ΠΈ ΠΡΠΈΠΌΠ΅Ρ 9-6.
ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ·-Π·Π° Π½Π΅Ρ Π²Π°ΡΠΊΠΈ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠΎ ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΈ ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±ΠΈΡ suid.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° - Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (ΠΊΠ°ΠΊΠΎΠ²ΡΠΌ ΠΎΠ½ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ) ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ.
command1 2> - | command2 # ΠΠΎΠΏΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ command1 ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ...
# ...Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
command1 2>& - | command2 # Π’Π°ΠΊ ΠΆΠ΅ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Bash Π²Π΅ΡΡΠΈΠΈ 2 ΠΈΠ»ΠΈ Π²ΡΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Bash Π²Π΅ΡΡΠΈΠΈ 1.XX.
#!/bin/bash
minimum_version=2
# ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Chet Ramey ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ Bash,
# Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π΄ΡΡΠ³ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ Π²Π΅ΡΡΠΈΡ $minimum_version=2.XX.
E_BAD_VERSION=80
if [ "$BASH_VERSION" \< "$minimum_version" ]
then
echo "ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Bash, Π²Π΅ΡΡΠΈΠΈ $minimum ΠΈΠ»ΠΈ Π²ΡΡΠ΅."
echo "ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ."
exit $E_BAD_VERSION
fi
...
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Bash ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡ Π² Bourne shell (#!/bin/sh). ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π² Linux Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°Ρ , sh ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠΌ bash, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ UNIX-ΡΠΈΡΡΠ΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅.
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΡΠΎΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° Π² ΡΡΠΈΠ»Π΅ MS-DOS (\r\n), Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ #!/bin/bash\r\n ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ. ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΡΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π° \r ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ.
#!/bin/bash
echo "ΠΠ°ΡΠ°Π»ΠΎ"
unix2dos $0 # Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ Π² ΡΠΎΡΠΌΠ°Ρ DOS.
chmod 755 $0 # ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π² Π½Π° Π·Π°ΠΏΡΡΠΊ.
# ΠΠΎΠΌΠ°Π½Π΄Π° 'unix2dos' ΡΠ΄Π°Π»ΠΈΡ ΠΏΡΠ°Π²ΠΎ Π½Π° Π·Π°ΠΏΡΡΠΊ ΠΈΠ· Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ°ΠΉΠ»Π°.
./$0 # ΠΠΎΠΏΡΡΠΊΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅Π±Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ.
# ΠΠΎ ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ
# Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° Π² ΡΡΠΈΠ»Π΅ DOS.
echo "ΠΠΎΠ½Π΅Ρ"
exit 0
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉΡΡ Ρ #!/bin/sh, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ Bash. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈΡΡΡΠΈΡ Bash, ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΡΡ Π² Bash, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ #!/bin/bash.
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ - ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅. ΠΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΡΠΎΠ΄Π΅, ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠΎΠ±ΠΎΡΠΎΡ.
WHATEVER=/home/bozo
export WHATEVER
exit 0
bash$ echo $WHATEVER
bash$
ΠΡΠ΄ΡΡΠ΅ ΡΠ²Π΅ΡΠ΅Π½Ρ -- ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $WHATEVER ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΡΡΠΎ ΠΈ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π΄Π°Π²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΡΠΈΠΌΠ΅Ρ 31-1. ΠΠ°ΠΏΠ°Π΄Π½Ρ Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅
#!/bin/bash
# ΠΠ°ΠΏΠ°Π΄Π½Ρ Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅.
outer_variable=Π²Π½Π΅ΡΠ½ΡΡ_ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
echo
echo "outer_variable = $outer_variable"
echo
(
# ΠΠ°ΠΏΡΡΠΊ Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅
echo "Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ outer_variable = $outer_variable"
inner_variable=Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ_ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ # ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ
echo "Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ inner_variable = $inner_variable"
outer_variable=Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ_ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ # ΠΠ°ΠΊ Π΄ΡΠΌΠ°Π΅ΡΠ΅? ΠΠ·ΠΌΠ΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ?
echo "Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ outer_variable = $outer_variable"
# ΠΡΡ ΠΎΠ΄ ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ
)
echo
echo "Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ inner_variable = $inner_variable" # ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ.
echo "Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ outer_variable = $outer_variable" # Π²Π½Π΅ΡΠ½ΡΡ_ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ.
echo
exit 0
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡ echo ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ read ΠΌΠΎΠΆΠ΅Ρ Π΄Π°Π²Π°ΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. Π ΡΡΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΊΠΎΠΌΠ°Π½Π΄Π° read Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π±Ρ ΠΎΠ½Π° Π±ΡΠ»Π° Π·Π°ΠΏΡΡΠ΅Π½Π° Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅. ΠΠΌΠ΅ΡΡΠΎ Π½Π΅Π΅ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ set (ΡΠΌ. ΠΡΠΈΠΌΠ΅Ρ 11-14).
ΠΡΠΈΠΌΠ΅Ρ 31-2. ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ echo ΠΊΠΎΠΌΠ°Π½Π΄Π΅ read, ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ
#!/bin/bash
# badread.sh:
# ΠΠΎΠΏΡΡΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ 'echo' ΠΈ 'read'
#+ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
a=aaa
b=bbb
c=ccc
echo "ΠΎΠ΄ΠΈΠ½ Π΄Π²Π° ΡΡΠΈ" | read a b c
# ΠΠΎΠΏΡΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ a, b ΠΈ c.
echo
echo "a = $a" # a = aaa
echo "b = $b" # b = bbb
echo "c = $c" # c = ccc
# ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ.
# ------------------------------
# ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
var=`echo "ΠΎΠ΄ΠΈΠ½ Π΄Π²Π° ΡΡΠΈ"`
set -- $var
a=$1; b=$2; c=$3
echo "-------"
echo "a = $a" # a = ΠΎΠ΄ΠΈΠ½
echo "b = $b" # b = Π΄Π²Π°
echo "c = $c" # c = ΡΡΠΈ
# ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
# ------------------------------
# ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ 'read', Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ.
# ΠΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅.
a=aaa # ΠΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π°.
b=bbb
c=ccc
echo; echo
echo "ΠΎΠ΄ΠΈΠ½ Π΄Π²Π° ΡΡΠΈ" | ( read a b c;
echo "ΠΠ½ΡΡΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ: "; echo "a = $a"; echo "b = $b"; echo "c = $c" )
# a = ΠΎΠ΄ΠΈΠ½
# b = Π΄Π²Π°
# c = ΡΡΠΈ
echo "-------"
echo "Π‘Π½Π°ΡΡΠΆΠΈ: "
echo "a = $a" # a = aaa
echo "b = $b" # b = bbb
echo "c = $c" # c = ccc
echo
exit 0
ΠΠ³ΡΠΎΠΌΠ½ΡΠΉ ΡΠΈΡΠΊ, Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄, Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π±ΠΈΡΠΎΠΌ "suid"[ 61 ].
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ CGI-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠΈΠΏΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π²Π·Π»ΠΎΠΌΡΠΈΠΊΠΎΠΌ Π½Π° Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ.
Bash Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΡΠΎΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠ»ΡΡ (//).
Π‘ΡΠ΅Π½Π°ΡΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Bash, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Linux ΠΈΠ»ΠΈ BSD ΡΠΈΡΡΠ΅ΠΌ, ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ Π² ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ UNIX. Π’Π°ΠΊΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ GNU-Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΡΡΠΈΠ»ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π»ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π² UNIX. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΡΠΈΠ»ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°, ΠΊΠ°ΠΊ tr.
Danger is near thee --
Beware, beware, beware, beware.
Many brave hearts are asleep in the deep.
So beware --
Beware.
A.J. Lamb and H.W. Petrie
ΠΠ»Π°Π²Π° 32. Π‘ΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠΎΠ·ΡΠΌΠΈΡΠ΅ Π² ΠΏΡΠΈΠ²ΡΡΠΊΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΠΉ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ. ΠΠ°ΠΆΠ΅ Π΄Π»Ρ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² "Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π½Ρ" ΠΈ "ΠΏΠΈΡΠ°Π½ΡΡ Π½Π° ΠΊΠΎΠ»Π΅Π½ΠΊΠ΅", Π½Π΅ ΠΏΠΎΠ»Π΅Π½ΠΈΡΠ΅ΡΡ, Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ ΡΠ²ΠΎΠΈ ΠΌΡΡΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡΠΊΠ°ΠΌ ΠΈ ΠΏΡΠΎΠ΄ΡΠΌΠ°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π·Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ ΠΏΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ.
32.1. ΠΠ΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π²
ο· ΠΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄. ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ Π²Π°ΡΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ , ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌΠΈ, Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ, Π΄Π»Ρ Π²Π°Ρ.
ο· PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
ο· # ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π»Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΡΡΠ» Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ,
ο· # Π½ΠΎ ΡΠ΅ΡΠ΅Π· Π³ΠΎΠ΄-Π΄ΡΡΠ³ΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΡΠΆΠ΅Π»ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ -- ΡΡΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ.
ο· # (ΠΠ· ΡΡΠ΅Π½Π°ΡΠΈΡ "pw.sh", Π°Π²ΡΠΎΡ: Antek Sawicki)
ΠΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.