ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»
Π ΡΠ°Π±Π». 27.3 ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π».
Π’Π°Π±Π»ΠΈΡΠ° 27.3. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
ΠΡΡΠΈΠ½Π½ΠΎ, Π΅ΡΠ»ΠΈ...
ΡΠΈΡΠ»ΠΎ1 -eq ΡΠΈΡΠ»ΠΎ2
ΡΠΈΡΠ»ΠΎ1 ΠΈ ΡΠΈΡΠ»ΠΎ2 ΡΠ°Π²Π½Ρ
ΡΠΈΡΠ»ΠΎ1 -ne ΡΠΈΡΠ»ΠΎ2
ΡΠΈΡΠ»ΠΎ1 ΠΈ ΡΠΈΡΠ»ΠΎ2 Π½Π΅ ΡΠ°Π²Π½Ρ
ΡΠΈΡΠ»ΠΎ1 -le ΡΠΈΡΠ»ΠΎ2
ΡΠΈΡΠ»ΠΎ1 ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ ΡΠΈΡΠ»Ρ2
ΡΠΈΡΠ»ΠΎ1 -lt ΡΠΈΡΠ»ΠΎ2
ΡΠΈΡΠ»ΠΎ1 ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠΈΡΠ»ΠΎ2
ΡΠΈΡΠ»ΠΎ1 -ge ΡΠΈΡΠ»ΠΎ2
ΡΠΈΡΠ»ΠΎ1 Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ ΡΠΈΡΠ»Ρ2
ΡΠΈΡΠ»ΠΎ1 -gt ΡΠΈΡΠ»ΠΎ2
ΡΠΈΡΠ»ΠΎ1 Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠΈΡΠ»ΠΎ2
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:
#!/bin/bash
# test-integer: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
INT=-5
if [ -z "$INT" ]; then
echo "INT is empty." >&2
exit 1
fi
if [ $INT -eq 0 ]; then
echo "INT is zero."
else
if [ $INT -lt 0 ]; then
echo "INT is negative."
else
echo "INT is positive."
fi
if [ $((INT % 2)) -eq 0 ]; then
echo "INT is even."
else
echo "INT is odd."
fi
fi
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅ΡΠ½ΠΎΡΡΡ (even) ΠΈΠ»ΠΈ Π½Π΅ΡΠ΅ΡΠ½ΠΎΡΡΡ (odd) ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π° Π½Π° 2, ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΄ΠΈΡΡ ΠΎ ΡΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π½Π΅ΡΠ΅ΡΠ½ΠΎΡΡΠΈ ΡΠΈΡΠ»Π°.
ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ test
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ bash ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΡΠ»ΡΡΡΠ΅Π½Π½Π°Ρ Π·Π°ΠΌΠ΅Π½Π° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ test. ΠΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
[[ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ]]
Π³Π΄Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ (true) ΠΈΠ»ΠΈ Π»ΠΎΠΆΠ½ΠΎΠ΅ (false) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΌΠ°Π½Π΄Π° [[ ]] ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ test (ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ ΠΆΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ), Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΡΠΎΠΊ:
ΡΡΡΠΎΠΊΠ°1 =~ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅_Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅Π΅ ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ°1 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΌΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠ΅ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ Π·Π°Π΄Π°Ρ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ INT ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π΅ ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ. ΠΠ»Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ [[ ]] Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΡΠΎΠΊΠΈ =~, ΠΌΡ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΡΠ΅ΠΌ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
#!/bin/bash
# test-integer2: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
if [ $INT -eq 0 ]; then
echo "INT is zero."
else
if [ $INT -lt 0 ]; then
echo "INT is negative."
else
echo "INT is positive."
fi
if [ $((INT % 2)) -eq 0 ]; then
echo "INT is even."
else
echo "INT is odd."
fi
fi
else
echo "INT is not an integer." >&2
exit 1
fi
ΠΡΠΈΠΌΠ΅Π½ΠΈΠ² ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΊΡΡΠ³ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ INT ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌΠΈΡΡ Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° Β«ΠΌΠΈΠ½ΡΡΒ», Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡ. ΠΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΡΠ°Π½ΡΠ΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠ΅ ΠΎΠ΄Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ [[ ]]: ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ == ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΡΠ΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
[ [email protected] ~]$ FILE=foo.bar
[ [email protected] ~]$ if [[ $FILE == foo.* ]]; then
> echo "$FILE matches pattern 'foo.*'"
> fi
foo.bar matches pattern 'foo.*'
ΠΠ½Π° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ [[ ]] Π² ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡΡΠ΅ΠΉ.
(( )) β Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»
Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ [[ ]] bash ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΠΊΠΎΠΌΠ°Π½ΒΠ΄Ρ (( )), ΠΊΠΎΡΠΎΡΡΡ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ. ΠΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π΅ 34.
ΠΠΎΠΌΠ°Π½Π΄Π° (( )) ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΠΈ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΈΡΡΠΈΠ½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π½ΡΠ»Ρ.
[ [email protected] ~]$ if ((1)); then echo "It is true."; fi
It is true.
[ [email protected] ~]$ if ((0)); then echo "It is true."; fi
[ [email protected] ~]$
ΠΡΠΈΠΌΠ΅Π½ΠΈΠ² (( )), ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ test-integer2, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°ΒΠ·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
#!/bin/bash
# test-integer2a: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
if ((INT == 0)); then
echo "INT is zero."
else
if ((INT < 0)); then
echo "INT is negative."
else
echo "INT is positive."
fi
if (( ((INT % 2)) == 0)); then
echo "INT is even."
else
echo "INT is odd."
fi
fi
else
echo "INT is not an integer." >&2
exit 1
fi
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π·Π½Π°ΠΊ Β«ΠΌΠ΅Π½ΡΡΠ΅Β», Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ==. Π’Π°ΠΊΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ. ΠΡΠΌΠ΅ΡΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ ΡΠΎΡΡΠ°Π²Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° (( )) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, Π° Π½Π΅ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»Π°ΠΌ, ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ.
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ². ΠΡ ΡΠΆΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈΡΡ Ρ Π½ΠΈΠΌΠΈ Π² Π³Π»Π°Π²Π΅ 17, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΡΡΠ°Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ find. ΠΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ test ΠΈ [[ ]] ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΎ Π (AND), ΠΠΠ (OR) ΠΈ ΠΠ (NOT). ΠΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ test ΠΈ [[ ]] ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π±Π». 27.4.
Π’Π°Π±Π»ΠΈΡΠ° 27.4. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ
test
[[ ]] ΠΈ (( ))
Π
-a
&&
ΠΠΠ
-o
||
ΠΠ
!
!
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π (AND). Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:
#!/bin/bash
# test-integer3: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
# Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.
MIN_VAL=1
MAX_VAL=100
INT=50
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
if [[ INT -ge MIN_VAL && INT -le MAX_VAL ]]; then
echo "$INT is within $MIN_VAL to $MAX_VAL."
else
echo "$INT is out of range."
fi
else
echo "INT is not an integer." >&2
exit 1
fi
ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π»ΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ INT Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠ΅ΠΆΠ΄Ρ MIN_VAL ΠΈ MAX_VAL. ΠΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ [[ ]], Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΉ Π΄Π²Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ &&. Π’Ρ ΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ test:
if [ $INT -ge $MIN_VAL -a $INT -le $MAX_VAL ]; then
echo "$INT is within $MIN_VAL to $MAX_VAL."
else
echo "$INT is out of range."
fi
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡΡΠΈΡΠ°Π½ΠΈΡ! ΠΎΠ±ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ, ΠΈ Π»ΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ INT Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°:
#!/bin/bash
# test-integer4: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΡΡ ΠΎΠ΄Π° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
# Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.
MIN_VAL=1
MAX_VAL=100
INT=50
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
if [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL) ]]; then
echo "$INT is outside $MIN_VAL to $MAX_VAL."
else
echo "$INT is in range."
fi
else
echo "INT is not an integer." >&2
exit 1
fi
ΠΠ΄Π΅ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡΡΠΈΡΠ°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π²ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ ΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ test:
if [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; then
echo "$INT is outside $MIN_VAL to $MAX_VAL."
else
echo "$INT is in range."
fi
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ test ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ [[ ]] ΠΈ (( ))), ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ bash, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ <, >, ( ΠΈ ), Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡ Π² ΠΊΠ°Π²ΡΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ.
Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ test ΠΈ [[ ]] Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ°Π²Π½ΠΎΡΠ΅Π½Π½Ρ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ ΠΎΡΠ΄Π°ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠ΅? ΠΠΎΠΌΠ°Π½Π΄Π° test ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΉ (ΠΈ ΡΠ°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ° POSIX), ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π° [[ ]] Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½Π° Π΄Π»Ρ bash. Π£ΠΌΠ΅ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ test ΠΊΡΠ°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΎ, Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° [[ ]] ΠΏΡΠΎΡΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ β Π±Π΅ΡΠΏΠΎΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΡΠ°Ρ ΠΈ ΠΎΡ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡΠΡΠ»ΠΈ Π²Π°ΠΌ Π΄ΠΎΠ²Π΅Π΄Π΅ΡΡΡ ΠΏΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°ΡΡ Ρ Β«ΠΈΡΡΠΈΠ½Π½ΡΠΌΠΈΒ» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ Unix, Π²Ρ Π±ΡΡΡΡΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ Linux ΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ. ΠΠ½ΠΈ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π½Π΅ΡΡΠΎ Π½Π΅ΡΠΈΡΡΠΎΠ΅ ΠΈ Π³ΡΠ΅Ρ ΠΎΠ²Π½ΠΎΠ΅. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΊΠΈΡ ΡΠ΅Π²Π½ΠΈΡΠ΅Π»Π΅ΠΉ Unix β Π²ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΌ. Π’ΠΎ Π΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²Π°ΠΌΠΈ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π»ΡΠ±ΠΎΠΉ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.