ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²Π²ΠΎΠ΄Π° ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΌΠ°Ρ ΠΈΠ½Π°ΡΠΈΠΉ. ΠΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Ρ. ΠΠΎ ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ trap (ΡΠΌ. ΠΡΠΈΠΌΠ΅Ρ 29-5).
ΠΡΠΈΠΌΠ΅Ρ 9-2. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°
#!/bin/bash
# timed-input.sh
# TMOUT=3 Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ
TIMELIMIT=3 # Π’ΡΠΈ ΡΠ΅ΠΊΡΠ½Π΄Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
PrintAnswer()
{
if [ "$answer" = TIMEOUT ]
then
echo $answer
else # Π§ΡΠΎΠ±Ρ Π½Π΅ ΡΠΏΡΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π²ΡΠ²ΠΎΠ΄Π°.
echo "ΠΠ°ΡΠ΅ Π»ΡΠ±ΠΈΠΌΠΎΠ΅ ΡΠ°ΡΡΠ΅Π½ΠΈΠ΅ $answer"
kill $! # "ΠΡΠΈΠ±ΠΈΡΡ" Π½Π΅Π½ΡΠΆΠ½ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ TimerOn, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
# $! -- PID ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΎΠ½Π΅.
fi
}
TimerOn()
{
sleep $TIMELIMIT && kill -s 14 $$ &
# ΠΠ΄Π°ΡΡ 3 ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠ΄Π°ΡΡ sigalarm ΡΡΠ΅Π½Π°ΡΠΈΡ.
}
Int14Vector()
{
answer="TIMEOUT"
PrintAnswer
exit 14
}
trap Int14Vector 14 # ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° (14)
echo "ΠΠ°ΡΠ΅ Π»ΡΠ±ΠΈΠΌΠΎΠ΅ ΡΠ°ΡΡΠ΅Π½ΠΈΠ΅? "
TimerOn
read answer
PrintAnswer
# ΠΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ·Π½Π°Π½ΠΈΡ, ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ,
#+ ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠΏΡΠΈΡ "-t"ΠΊΠΎΠΌΠ°Π½Π΄Ρ "read" ΡΠΏΡΠΎΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΡ.
# Π‘ΠΌ. "t-out.sh", Π½ΠΈΠΆΠ΅.
# ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ΅...
#+ ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° C ΠΈΠ»ΠΈ C++,
#+ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ 'alarm' ΠΈ 'setitimer'.
exit 0
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ stty.
ΠΡΠΈΠΌΠ΅Ρ 9-3. ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²Π²ΠΎΠ΄Π° ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
#!/bin/bash
# timeout.sh
# ΠΠ²ΡΠΎΡ: Stephane Chazelas,
# Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ Π°Π²ΡΠΎΡΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
INTERVAL=5 # ΠΏΡΠ΅Π΄Π΅Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ
timedout_read() {
timeout=$1
varname=$2
old_tty_settings=`stty -g`
stty -icanon min 0 time ${timeout}0
eval read $varname # ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ read $varname
stty "$old_tty_settings"
# Π‘ΠΌ. man stty.
}
echo; echo -n "ΠΠ°ΠΊ ΠΠ°Ρ Π·ΠΎΠ²ΡΡ? ΠΡΠ²Π΅ΡΠ°ΠΉΡΠ΅ Π±ΡΡΡΡΠ΅Π΅! "
timedout_read $INTERVAL your_name
# Π’Π°ΠΊΠΎΠΉ ΠΏΡΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠΏΠ°Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ².
# ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
# (ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎ 25.5 ΡΠ΅ΠΊΡΠ½Π΄).
echo
if [ ! -z "$your_name" ] # ΠΡΠ»ΠΈ ΠΈΠΌΡ Π±ΡΠ»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ...
then
echo "ΠΠ°Ρ Π·ΠΎΠ²ΡΡ $your_name."
else
echo "ΠΡ Π½Π΅ ΡΡΠΏΠ΅Π»ΠΈ ΠΎΡΠ²Π΅ΡΠΈΡΡ."
fi
echo
# ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ "timed-input.sh".
# ΠΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ Π½Π° ΠΊΠ»Π°Π²ΠΈΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ±ΡΠΎΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
exit 0
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± -- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠΈΡ -t ΠΊΠΎΠΌΠ°Π½Π΄Ρ read.
ΠΡΠΈΠΌΠ΅Ρ 9-4. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ read
#!/bin/bash
# t-out.sh
TIMELIMIT=4 # 4 ΡΠ΅ΠΊΡΠ½Π΄Ρ
read -t $TIMELIMIT variable <&1
echo
if [ -z "$variable" ]
then
echo "ΠΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈΡΡΠ΅ΠΊΠ»ΠΎ."
else
echo "variable = $variable"
fi
exit 0
$UID
user id number
UID (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ) ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ /etc/passwd
ΠΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ UID ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠΎΠ±ΡΠ΅Π» ΠΏΡΠ°Π²Π° Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ su. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $UID Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ 9-5. Π― -- root?
#!/bin/bash
# am-i-root.sh: Root Ρ, ΠΈΠ»ΠΈ Π½Π΅ root?
ROOT_UID=0 # $UID root-Π° Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ 0.
if [ "$UID" -eq "$ROOT_UID" ] # ΠΠ°ΡΡΠΎΡΡΠΈΠΉ "root"?
then
echo "- root!"
else
echo "ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π½ΠΎ ΠΌΠ°ΠΌΠΎΡΠΊΠ° Π²Π°Ρ ΡΠΎΠΆΠ΅ Π»ΡΠ±ΠΈΡ)!"
fi
exit 0
# ============================================================= #
# ΠΠΎΠ΄, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ,
#+ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ Π²ΡΡΠ΅
# ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ»ΠΈΡΠΈΡΡ root-Π° ΠΎΡ Π½Π΅ root-Π°:
ROOTUSER_NAME=root
username=`id -nu` # ΠΠ»ΠΈ... username=`whoami`
if [ "$username" = "$ROOTUSER_NAME" ]
then
echo "Π ΡΡΡΠΈ-ΡΡΡΡΠΈ. - root!"
else
echo "ΠΡ - Π»ΠΈΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ·Π΅Ρ."
fi
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΠΡΠΈΠΌΠ΅Ρ 2-2.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ $ENV, $LOGNAME, $MAIL, $TERM, $USER ΠΈ $USERNAME, Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Bash. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ΠΈ ΡΠ°ΡΡΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Bash. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $SHELL, ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ Π² /etc/passwd ΠΈΠ»ΠΈ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ "init" ΠΈ ΠΎΠ½Π° ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Bash.
tcsh% echo $LOGNAME
bozo
tcsh% echo $SHELL
/bin/tcsh
tcsh% echo $TERM
rxvt
bash$ echo $LOGNAME
bozo
bash$ echo $SHELL
/bin/tcsh
bash$ echo $TERM
rxvt
ΠΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ (Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ)
$0, $1, $2 ΠΈ Ρ.Π΄.
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ... ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ set (ΡΠΌ. ΠΡΠΈΠΌΠ΅Ρ 4-5 ΠΈ ΠΡΠΈΠΌΠ΅Ρ 11-13)
$#
ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ[ 20 ], ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΡΠΌ. ΠΡΠΈΠΌΠ΅Ρ 33-2)
$*
ΠΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (ΡΠ»ΠΎΠ²Π°)
[email protected]
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ $*, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΡΡΠΎΠΊΠ° (ΡΠ»ΠΎΠ²ΠΎ), Ρ.Π΅. ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π΅ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°ΡΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ 9-6. arglist: ΠΡΠ²ΠΎΠ΄ ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ $* ΠΈ [email protected]
#!/bin/bash
# ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: "ΠΎΠ΄ΠΈΠ½ Π΄Π²Π° ΡΡΠΈ".
E_BADARGS=65
if [ ! -n "$1" ]
then
echo "ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: `basename $0` argument1 argument2 ΠΈ Ρ.Π΄."
exit $E_BADARGS
fi
echo
index=1
echo "Π‘ΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"\$*\":"
for arg in "$*" # Π Π°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ "$*" Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ.
do
echo "ΠΡΠ³ΡΠΌΠ΅Π½Ρ #$index = $arg"
let "index+=1"
done # $* Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ.
echo "ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ°."
echo
index=1
echo "Π‘ΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"\ [email protected]\":"
for arg in " [email protected]"
do
echo "ΠΡΠ³ΡΠΌΠ΅Π½Ρ #$index = $arg"
let "index+=1"
done # [email protected] Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ (ΡΠ»ΠΎΠ²Π°).
echo "Π‘ΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΡΠΎΠΊ (ΡΠ»ΠΎΠ²)."
echo
exit 0
ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ shift (ΡΠ΄Π²ΠΈΠ³), ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ [email protected], ΡΠ΅ΡΡΠ΅ΡΡΡ, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΄Π²ΠΈΠ³Π°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ "Π²Π½ΠΈΠ·" (ΠΈΠ»ΠΈ "Π²Π»Π΅Π²ΠΎ", Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅).
#!/bin/bash
# ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π² ΡΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅: ./scriptname 1 2 3 4 5
echo " [email protected]" # 1 2 3 4 5
shift
echo " [email protected]" # 2 3 4 5
shift
echo " [email protected]" # 3 4 5
# ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ "shift" ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° $1,
# Π½ΠΎ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΡΡΠ°ΡΡΡΡ Π² " [email protected]".
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ [email protected] ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠΈΠΏΠ° Π²Π²ΠΎΠ΄Π° Π² ΡΡΠ΅Π½Π°ΡΠΈΡ. ΠΠΎΠΌΠ°Π½Π΄Π° cat " [email protected]" ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²Π²ΠΎΠ΄ ΠΊΠ°ΠΊ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²Π²ΠΎΠ΄Π° stdin, ΡΠ°ΠΊ ΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, ΠΈΠΌΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ 12-17 ΠΈ ΠΡΠΈΠΌΠ΅Ρ 12-18.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ $* ΠΈ [email protected], Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠ²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ! ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $IFS.
ΠΡΠΈΠΌΠ΅Ρ 9-7. ΠΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ $* ΠΈ [email protected]
#!/bin/bash