ΠΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ
Π€ΡΠ½ΠΊΡΠΈΠΈ -- ΡΡΡΡ Π΅ΡΡΡ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Π° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ stdin Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ (ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ stdin) (ΠΊΠ°ΠΊ Π² ΠΡΠΈΠΌΠ΅Ρ 3-1).
ΠΡΠΈΠΌΠ΅Ρ 22-7. ΠΠ°ΡΡΠΎΡΡΠ΅Π΅ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
#!/bin/bash
# ΠΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ "Π½Π°ΡΡΠΎΡΡΠ΅Π΅ ΠΈΠΌΡ" ΠΈΠ· /etc/passwd.
ARGCOUNT=1 # ΠΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
E_WRONGARGS=65
file=/etc/passwd
pattern=$1
if [ $# -ne "$ARGCOUNT" ]
then
echo "ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: `basename $0` USERNAME"
exit $E_WRONGARGS
fi
file_excerpt () # ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ°ΠΉΠ»Π΅ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Ρ, Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊΠΈ.
{
while read line
do
echo "$line" | grep $1 | awk -F":" '{ print $5 }' # Π£ΠΊΠ°Π·ΡΠ²Π΅Ρ awk ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ":" ΠΊΠ°ΠΊ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ.
done
} <$file # ΠΠΎΠ΄ΠΌΠ΅Π½ΠΈΡΡ stdin Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ.
file_excerpt $pattern
# ΠΠ°, ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π΄ΠΎ
# grep PATTERN /etc/passwd | awk -F":" '{ print $5 }'
# ΠΈΠ»ΠΈ
# awk -F: '/PATTERN/ {print $5}'
# ΠΈΠ»ΠΈ
# awk -F: '($1 == "username") { print $5 }'
# ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ ΡΠ°ΠΊ ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ.
exit 0
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΉ, ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ½ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π° Π΄Π»Ρ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ, Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ.
# ΠΠΌΠ΅ΡΡΠΎ:
Function ()
{
...
} < file
# ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°ΠΊ:
Function ()
{
{
...
} < file
}
# ΠΠΎΡ ΠΎΠΆΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ,
Function () # Π’ΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
{
{
echo $*
} | tr a b
}
Function () # ΠΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
{
echo $*
} | tr a b # ΠΠ°Π»ΠΈΡΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° -- ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅.
# Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.
22.2. ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ "Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ" ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ?
Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅, ΠΈΠΌΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ. ΠΠ»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ "Π²ΠΈΠ΄Π½Π°" ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Π»Π΅ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ 22-8. ΠΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
#!/bin/bash
func ()
{
local loc_var=23 # ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
echo
echo "\"loc_var\" Π² ΡΡΠ½ΠΊΡΠΈΠΈ = $loc_var"
global_var=999 # ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ Π±ΡΠ»Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ.
echo "\"global_var\" Π² ΡΡΠ½ΠΊΡΠΈΠΈ = $global_var"
}
func
# ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, "Π²ΠΈΠ΄Π½Π°" Π»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
echo
echo "\"loc_var\" Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ = $loc_var"
# "loc_var" Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ =
# ΠΡΠ°ΠΊ, $loc_var Π½Π΅ Π²ΠΈΠ΄Π½Π° Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
echo "\"global_var\" Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ = $global_var"
# "global_var" Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ = 999
# $global_var ΠΈΠΌΠ΅Π΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
echo
exit 0
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌΡΠ΅ Π² ΡΠ΅Π»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΈΡΠ°ΡΡΡΡ Π½Π΅ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΌΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π°. ΠΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
#!/bin/bash
func ()
{
global_var=37 # ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡΡΡ Π½Π΅ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ
#+ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π°.
} # ΠΠΠΠΠ¦ Π€Π£ΠΠΠ¦ΠΠ
echo "global_var = $global_var" # global_var =
# Π€ΡΠ½ΠΊΡΠΈΡ "func" Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»Π° Π²ΡΠ·Π²Π°Π½Π°,
#+ ΠΏΠΎΡΡΠΎΠΌΡ $global_var ΠΏΠΎΠΊΠ° Π΅ΡΠ΅ Π½Π΅ "Π²ΠΈΠ΄Π½Π°" Π·Π΄Π΅ΡΡ.
func
echo "global_var = $global_var" # global_var = 37
# ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ»Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π² ΡΡΠ½ΠΊΡΠΈΠΈ.
22.2.1. ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΡ.
Π₯ΠΎΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ[ 52 ], Π½ΠΎ ΠΎΠ½Π° ΡΠΎΠΏΡΡΠΆΠ΅Π½Π° Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ [ 53 ].
ΠΡΠΈΠΌΠ΅Ρ 22-9. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠΈ
#!/bin/bash
# ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»
# ---------
# ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ bash Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ?
# ΠΠ°! ΠΠΎ...
# ΠΡΠΆΠ½ΠΎ Π±ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΡΠ±ΠΈΠ½Π½ΠΎΠ³ΠΎΠ»ΠΎΠ²ΡΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ
# Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
MAX_ARG=5
E_WRONG_ARGS=65
E_RANGE_ERR=66
if [ -z "$1" ]
then
echo "ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: `basename $0` ΡΠΈΡΠ»ΠΎ"
exit $E_WRONG_ARGS
fi
if [ "$1" -gt $MAX_ARG ]
then
echo "ΠΡΡ ΠΎΠ΄ Π·Π° Π²Π΅ΡΡ Π½ΠΈΠΉ ΠΏΡΠ΅Π΄Π΅Π» (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ -- 5)."
# ΠΠ΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ.
# ΠΡΠ»ΠΈ Π²Π°ΠΌ Π·Π°Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π½ΡΡΡ Π²Π΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΡ,
# ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π½Π°ΡΡΠΎΡΡΠ΅ΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
exit $E_RANGE_ERR
fi
fact ()
{
local number=$1
# ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ "number" Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ,
# ΠΈΠ½Π°ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²Π΅ΡΠ½ΡΠΉ.
if [ "$number" -eq 0 ]
then
factorial=1 # Π€Π°ΠΊΡΠΎΡΠΈΠ°Π» ΡΠΈΡΠ»Π° 0 = 1.
else
let "decrnum = number - 1"
fact $decrnum # Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ.
let "factorial = $number * $?"
fi
return $factorial
}
fact $1
echo "Π€Π°ΠΊΡΠΎΡΠΈΠ°Π» ΡΠΈΡΠ»Π° $1 = $?."
exit 0
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π² ΠΡΠΈΠΌΠ΅Ρ A-18. ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ ΡΠ΅ΠΊΡΡΡΠΈΡ Π²Π΅ΡΡΠΌΠ° ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΊΠΎΠ΅ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ .
ΠΠ»Π°Π²Π° 23. ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ
ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π² Bash -- ΡΡΠΎ Π½ΠΈ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ "Π³ΠΎΡΡΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ", ΡΡΠ΅Π΄ΡΡΠ²ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π°Π±ΠΎΡΠ° Π΄Π»ΠΈΠ½Π½ΡΡ ΡΡΡΠΎΠΊ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. ΠΡΠ»ΠΈ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² ΡΠ°ΠΉΠ» ~/.bashrc Π²ΡΡΠ°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ alias lm="ls -l | more", ΡΠΎ ΠΏΠΎΡΠΎΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΡΠ²ΠΎΠΈ ΡΠΈΠ»Ρ ΠΈ Π²ΡΠ΅ΠΌΡ, Π½Π°Π±ΠΈΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ lm, Π²ΠΌΠ΅ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ls -l | more. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠ² alias rm="rm -i" (ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²), Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΡ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΠ΅ΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²Π°ΠΆΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ Π½Π΅ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π²Π΅ΡΡΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ ΠΈΠΌΠ΅Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΏΡΠΈΡΡΡΡΡ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌ Π² ΡΠ·ΡΠΊΠ΅ C, Π½ΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Bash Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ "ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ" Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΡΠ΅Π»Π΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ°[ 54 ]. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌΡ Π²Π½ΡΡΡΠΈ "ΡΠΎΡΡΠ°Π²Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ", ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ if/then, ΡΠΈΠΊΠ»Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅Π³Π΄Π°, Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΠΌΡΠ΅ Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ, Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ 23-1. ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ
#!/bin/bash
shopt -s expand_aliases
# ΠΡΠ° ΠΎΠΏΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π°, ΠΈΠ½Π°ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ "ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ" ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ.
alias ll="ls -l"
# Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠ΅ ('), ΡΠ°ΠΊ ΠΈ Π΄Π²ΠΎΠΉΠ½ΡΠ΅ (") ΠΊΠ°Π²ΡΡΠΊΠΈ.
echo "ΠΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ \"ll\":"
ll /usr/X11R6/bin/mk* #* Π Π°Π±ΠΎΡΠ°Π΅Ρ.
echo
directory=/usr/X11R6/bin/
prefix=mk* # ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ -- Π½Π΅ Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ.
echo "ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ \"directory\" + \"prefix\" = $directory$prefix"
echo
alias lll="ls -l $directory$prefix"
echo "ΠΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ \"lll\":"
lll # Π‘ΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π² /usr/X11R6/bin, ΡΡΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ mk.
# ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ.
TRUE=1
echo
if [ TRUE ]
then
alias rr="ls -l"
echo "ΠΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ \"rr\", ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌΡ Π²Π½ΡΡΡΠΈ if/then:"
rr /usr/X11R6/bin/mk* #* Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ -- ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅!
# Π ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ°ΠΌ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ Π²Π½ΡΡΡΠΈ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ.
echo "ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌ:"
ll /usr/X11R6/bin/mk*
fi
echo
count=0
while [ $count -lt 3 ]
do
alias rrr="ls -l"
echo "ΠΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ \"rrr\", ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌΡ Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° \"while\":"
rrr /usr/X11R6/bin/mk* #* Π’Π°ΠΊ ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ°.
# alias.sh: line 57: rrr: command not found
let count+=1
done
echo; echo
alias xyz='cat $0' # Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π±Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ.
# ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° "ΡΡΡΠΎΠ³ΠΈΠ΅" ΠΊΠ°Π²ΡΡΠΊΠΈ.
xyz
# ΠΠΎΡ ΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ,
#+ Ρ ΠΎΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Bash ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
#
# Steve Jacobson ΠΎΡΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ
#+ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ "$0" ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ°.
exit 0
ΠΠΎΠΌΠ°Π½Π΄Π° unalias ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠ°Π½Π΅Π΅ .
ΠΡΠΈΠΌΠ΅Ρ 23-2. unalias: ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ²
#!/bin/bash
shopt -s expand_aliases # Π Π°Π·ΡΠ΅ΡΠΈΡΡ "ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅" ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ².
alias llm='ls -al | more'
llm
echo
unalias llm # Π£Π΄Π°Π»ΠΈΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ.
llm
# Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, Ρ.ΠΊ. ΠΊΠΎΠΌΠ°Π½Π΄Π° 'llm' Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅ΡΡΡ.
exit 0
bash$ ./unalias.sh
total 6
drwxrwxr-x 2 bozo bozo 3072 Feb 6 14:04 .
drwxr-xr-x 40 bozo bozo 2048 Feb 6 14:04 ..
-rwxr-xr-x 1 bozo bozo 199 Feb 6 14:04 unalias.sh
./unalias.sh: llm: command not found
ΠΠ»Π°Π²Π° 24. Π‘ΠΏΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄
Π‘ΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»ΡΠΆΠ°Ρ ΡΠΏΠΈΡΠΊΠΈ: "Π-ΡΠΏΠΈΡΠΊΠΈ" ΠΈ "ΠΠΠ-ΡΠΏΠΈΡΠΊΠΈ". ΠΠ½ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ if/then ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ case.
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅ΠΏΠΎΡΠΊΠΈ