echo "var1 = '$var1'"
echo "var2 = '$var2'"
echo "var3 = '$var3'"
echo "var4 = '$var4'"
echo "var5 = '$var5'"
ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π²Π²ΠΎΠ΄ΠΈΡ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΏΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° read, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
[ [email protected] ~]$ read-multiple
Enter one or more values > a b c d e
var1 = 'a'
var2 = 'b'
var3 = 'c'
var4 = 'd'
var5 = 'e'
[ [email protected] ~]$ read-multiple
Enter one or more values > a
var1 = 'a'
var2 = ''
var3 = ''
var4 = ''
var5 = ''
[ [email protected] ~]$ read-multiple
Enter one or more values > a b c d e f g
var1 = 'a'
var2 = 'b'
var3 = 'c'
var4 = 'd'
var5 = 'e f g'
ΠΡΠ»ΠΈ read ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΈΡΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ Ρ Π²Π°ΡΠΈΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΎΡΡΠ°Π½ΡΡΡΡ ΠΏΡΡΡΡΠΌΠΈ, Π° ΠΏΡΠΈ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° Π²Ρ ΠΎΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΡ Π²Π΅ΡΡ ΠΎΡΡΠ°ΡΠΎΠΊ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ read, Π²Π΅ΡΡ Π²Π²ΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ REPLY:
#!/bin/bash
# read-single: ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
echo -n "Enter one or more values > "
read
echo "REPLY = '$REPLY'"
ΠΠ°ΠΏΡΡΠΊ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ:
[ [email protected] ~]$ read-single
Enter one or more values > a b c d
REPLY = 'a b c d'
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
read ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ Π² ΡΠ°Π±Π». 28.1.
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ read. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -p ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΡΠΎΠΊΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΊ Π²Π²ΠΎΠ΄Ρ:
#!/bin/bash
# read-single: ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
read -p "Enter one or more values > "
echo "REPLY = '$REPLY'"
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ -t ΠΈ -s ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ Π²Π²ΠΎΠ΄ Β«ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΡ Β» Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°ΡΡΠΈΠ΅ Π²Π²ΠΎΠ΄ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ:
#!/bin/bash
# read-secret: Π²Π²ΠΎΠ΄ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠΎΠ»Ρ
if read -t 10 -sp "Enter secret passphrase > " secret_pass; then
echo -e "\nSecret passphrase = '$secret_pass'"
else
echo -e "\nInput timed out" >&2
exit 1
fi
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅ΡΡΠΈ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ ΠΆΠ΄Π΅Ρ 10 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠ»ΠΈ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²Π²ΠΎΠ΄ Π½Π΅ Π±ΡΠ» Π·Π°Π²Π΅ΡΡΠ΅Π½, ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -s, ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΠ°ΡΠΎΠ»Ρ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²Π²ΠΎΠ΄Π°.
ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π² ΡΡΡΠΎΠΊΠ΅ Π²Π²ΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ IFS
ΠΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° Π½Π° ΡΠ»ΠΎΠ²Π° ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ read. ΠΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ»ΠΎΠ²Π° Π²ΠΎ Π²Π²ΠΎΠ΄Π΅, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ read ΡΠ°Π·Π½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ IFS (ΠΎΡ Internal Field Separator β Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ IFS Ρ ΡΠ°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΡΠΎΠ±Π΅Π»Π°, ΡΠ°Π±ΡΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΠ·ΠΌΠ΅Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π²Π²ΠΎΠ΄Π° Π½Π° ΠΏΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ read. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ» /etc/passwd Ρ ΡΠ°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ , Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»Ρ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ΠΌ. ΠΡΠΈΡΠ²ΠΎΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ read ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ /etc/passwd ΠΈ Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡΡΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΡΡΠΎΠΊΠΈ Π½Π° ΠΏΠΎΠ»Ρ Π΄Π»Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ:
#!/bin/bash
# read-ifs: ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ· ΡΠ°ΠΉΠ»Π°
FILE=/etc/passwd
read -p "Enter a username > " user_name
file_info=$(grep "^$user_name:" $FILE) (1)
if [ -n "$file_info" ]; then
IFS=":" read user pw uid gid name home shell <<< "$file_info" (2)
echo "User = '$user'"
echo "UID = '$uid'"
echo "GID = '$gid'"
echo "Full Name = '$name'"
echo "Home Dir. = '$home'"
echo "Shell = '$shell'"
else
echo "No such user '$user_name'" >&2
exit 1
fi
ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅ΡΡΠΈ ΠΈΠΌΡ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΠ»Ρ, Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ /etc/passwd. Π ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΅ΡΡΡ Π΄Π²Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ. ΠΠ΅ΡΠ²Π°Ρ, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ Π·Π½Π°ΠΊΠΎΠΌ (1), ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ grep ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ file_info. Π Π΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π° /etc/passwd Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΡΡΡΠΎΠΊΠ°, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ Π·Π½Π°ΠΊΠΎΠΌ (2), ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ°ΡΡΠ΅ΠΉ: ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ read ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΠΎΠ³ΠΎ Π½Π°ΠΌ, Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²Π»ΠΈΡΡΡ. ΠΠ½ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°. ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π½ΠΎΡΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ, ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ ΠΈΠ½Π°ΡΠ΅:
OLD_IFS="$IFS"
IFS=":"
read user pw uid gid name home shell <<< "$file_info"
IFS="$OLD_IFS"
ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΆΠ½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ IFS, ΠΏΡΠΈΡΠ²ΠΎΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ read ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΆΠ½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ IFS. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄, Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅.
read Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅ΠΠ°ΠΆΠ΅ ΠΏΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° read ΡΠΏΠΎΡΠΎΠ±Π½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
echo "foo" | read
ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΏΡΠΈΠ΅ΠΌ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠ½Π΅ΡΠ½Π΅ Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»Π°, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ REPLY Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΠΏΡΡΡΠΎΠΉ. ΠΠΎΡΠ΅ΠΌΡ?
ΠΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ. Π bash (ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ sh) ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ (subshells). ΠΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΏΠΈΡΠΌΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΈ Π΅Π΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°Ρ . Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° read Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅.
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠ΅ΠΊ Π² Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠΎΠΏΠΈΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅. ΠΠΎΠ³Π΄Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠΏΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°ΠΊ ΠΌΡ Π·Π½Π°Π΅ΠΌ, read ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ read ΠΏΡΠΈΡΠ²ΠΎΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ foo ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ REPLY Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ, ΠΏΠΎΠ΄ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΈ Π΅Π΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄ΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½Ρ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°ΡΠ΅Π½.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΡΠΎΠΊ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π² Π³Π»Π°Π²Π΅ 36.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ <<< ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ. ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° (here string) ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΌΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΡΠΎΡΠ΅, ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΡΠΎΠΊΠ° Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π° /etc/passwd ΠΏΠΎΠ΄Π°Π΅ΡΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ read. Π£ ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π²ΠΎΠΏΡΠΎΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΡΠ°ΠΊΠΎΠΉ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠΉ, ΡΠΏΠΎΡΠΎΠ± Π²ΠΌΠ΅ΡΡΠΎ
echo "$file_info" | IFS=":" read user pw uid gid name home shell
Π‘ΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ°ΠΊ: Π½Π° ΡΠΎ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΈΡΠΈΠ½Ρβ¦
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π²ΠΎΠ΄Π°
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ΅ΠΌΠ° Π²Π²ΠΎΠ΄Π° Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π²Π»Π΅ΡΠ΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΠ»ΠΎΡ ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡΡ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡΡΠΌ. ΠΠ°ΡΠ°ΡΡΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π² ΡΠΎΡΠΌΠ΅ Π²Π²ΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡ ΡΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΊΠΎΠ΅-ΡΡΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΡΠΎΡΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡΡΠΌ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π³Π»Π°Π²Ρ, Π³Π΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΎΡΡΠ΅ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ Π½Π΅ΡΠΈΡΡΠΎΠ²ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. Π’Π°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ Π»ΡΠ±ΡΡ Π²Π²ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΊΠ°Π· ΠΎΡ Π·Π°ΡΠΈΡΠ½ΡΡ ΠΌΠ΅Ρ ΡΠ°Π΄ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΠΏΡΠΎΡΡΠΈΡΠ΅Π»Π΅Π½, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΈΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°Π²ΡΠΎΡΠΎΠΌ Ρ ΡΠ΅Π»ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎ Π΄Π°ΠΆΠ΅ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π² Π½Π΅Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΉ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π·Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:
#!/bin/bash
# read-validate: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π²ΠΎΠ΄Π°
invalid_input () {
echo "Invalid input '$REPLY'" >&2
exit 1
}
read -p "Enter a single item > "
# ΠΏΡΡΡΠΎΠΉ Π²Π²ΠΎΠ΄ (Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ)
[[ -z $REPLY ]] && invalid_input
# Π²Π²ΠΎΠ΄ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ)
(( $(echo $REPLY | wc -w) > 1 )) && invalid_input
# Π²Π²Π΅Π΄Π΅Π½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°?
if [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; then
echo "'$REPLY' is a valid filename."
if [[ -e $REPLY ]]; then
echo "And file '$REPLY' exists."
else
echo "However, file '$REPLY' does not exist."
fi
# Π²Π²Π΅Π΄Π΅Π½ΠΎ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ?
if [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; then
echo "'$REPLY' is a floating point number."