if [ "$1" -lt "$lower_limit" -o "$1" -gt "$upper_limit" ]
then
return $FALSE # ΠΡΡ ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°.
fi
row=$2
let "left = $row * $ROWS" # ΠΠ΅Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ°.
let "right = $left + $COLS - 1" # ΠΡΠ°Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ°.
if [ "$1" -lt "$left" -o "$1" -gt "$right" ]
then
return $FALSE # ΠΡΡ ΠΎΠ» Π·Π° Π½ΠΈΠΆΠ½ΡΡ ΡΡΡΠΎΠΊΡ.
fi
return $TRUE # ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Ρ.
}
IsAlive () # ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ "ΠΆΠΈΠ²ΠΎΠΉ" ΠΎΡΠΎΠ±ΠΈ Π² ΡΡΠ΅ΠΉΠΊΠ΅.
# ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
{
GetCount "$1" $2 # ΠΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»-Π²ΠΎ "ΠΆΠΈΠ²ΡΡ " ΡΠΎΡΠ΅Π΄Π΅ΠΉ.
local nhbd=$?
if [ "$nhbd" -eq "$BIRTH" ] # "ΠΠΈΠ²Π°Ρ".
then
return $ALIVE
fi
if [ "$3" = "." -a "$nhbd" -eq "$SURVIVE" ]
then # "ΠΠΈΠ²Π°Ρ" Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ Π±ΡΠ»Π° "ΠΆΠΈΠ²Π°Ρ".
return $ALIVE
fi
return $DEAD # ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
}
GetCount () # ΠΠΎΠ΄ΡΡΠ΅Ρ "ΠΆΠΈΠ²ΡΡ " ΡΠΎΡΠ΅Π΄Π΅ΠΉ.
# ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ 2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
# $1) ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ-ΠΌΠ°ΡΡΠΈΠ²
# $2) cell Π½ΠΎΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ
{
local cell_number=$2
local array
local top
local center
local bottom
local r
local row
local i
local t_top
local t_cen
local t_bot
local count=0
local ROW_NHBD=3
array=( `echo "$1"` )
let "top = $cell_number - $COLS - 1" # ΠΠΎΠΌΠ΅ΡΠ° ΡΠΎΡΠ΅Π΄Π½ΠΈΡ ΡΡΠ΅Π΅ΠΊ.
let "center = $cell_number - 1"
let "bottom = $cell_number + $COLS - 1"
let "r = $cell_number / $ROWS"
for ((i=0; i<$ROW_NHBD; i++)) # ΠΡΠΎΡΠΌΠΎΡΡ ΡΠ»Π΅Π²Π°-Π½Π°ΠΏΡΠ°Π²ΠΎ.
do
let "t_top = $top + $i"
let "t_cen = $center + $i"
let "t_bot = $bottom + $i"
let "row = $r" # ΠΡΠΎΠΉΡΠΈ ΠΏΠΎ ΡΠΎΡΠ΅Π΄ΡΠΌ Π² ΡΡΠ΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΠΊΠ΅.
IsValid $t_cen $row # ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Ρ?
if [ $? -eq "$TRUE" ]
then
if [ ${array[$t_cen]} = "$ALIVE1" ] # "ΠΠΈΠ²Π°Ρ"?
then # ΠΠ°!
let "count += 1" # ΠΠ°ΡΠ°ΡΡΠΈΡΡ ΡΡΠ΅ΡΡΠΈΠΊ.
fi
fi
let "row = $r - 1" # ΠΠΎ Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΡΡΠΎΠΊΠ΅.
IsValid $t_top $row
if [ $? -eq "$TRUE" ]
then
if [ ${array[$t_top]} = "$ALIVE1" ]
then
let "count += 1"
fi
fi
let "row = $r + 1" # ΠΠΎ Π½ΠΈΠΆΠ½Π΅ΠΉ ΡΡΡΠΎΠΊΠ΅.
IsValid $t_bot $row
if [ $? -eq "$TRUE" ]
then
if [ ${array[$t_bot]} = "$ALIVE1" ]
then
let "count += 1"
fi
fi
done
if [ ${array[$cell_number]} = "$ALIVE1" ]
then
let "count -= 1" # Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ΅ΠΉΠΊΠ°
fi #+ Π½Π΅ Π±ΡΠ»Π° ΠΏΠΎΠ΄ΡΡΠΈΡΠ°Π½Π°.
return $count
}
next_gen () # ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½ΠΎΠ²ΠΎΠΌ "ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΈ".
{
local array
local i=0
array=( `echo "$1"` ) # ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ².
while [ "$i" -lt "$cells" ]
do
IsAlive "$1" $i ${array[$i]} # "ΠΠΈΠ²Π°Ρ"?
if [ $? -eq "$ALIVE" ]
then # ΠΡΠ»ΠΈ "ΠΆΠΈΠ²Π°Ρ", ΡΠΎ
array[$i]=. #+ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΡΠΊΡ.
else
array[$i]="_" # ΠΠ½Π°ΡΠ΅ -- ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ
fi #+ (ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠ±Π΅Π»).
let "i += 1"
done
# let "generation += 1" # Π£Π²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ.
# ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π² ΡΡΠ½ΠΊΡΠΈΡ "display".
avar=`echo ${array[@]}` # ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π² ΡΡΡΠΎΠΊΡ.
display "$avar" # ΠΡΠ²Π΅ΡΡΠΈ Π΅Π³ΠΎ.
echo; echo
echo "ΠΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ $generation -- ΠΆΠΈΠ²ΡΡ ΠΎΡΠΎΠ±Π΅ΠΉ $alive"
if [ "$alive" -eq 0 ]
then
echo
echo "ΠΡΠ΅ΠΆΠ΄Π΅Π²Π΅ΡΠΌΠ΅Π½Π½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅: Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΆΠΈΠ²ΠΎΠΉ ΠΎΡΠΎΠ±ΠΈ!"
exit $NONE_ALIVE # ΠΠ΅Ρ ΡΠΌΡΡΠ»Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ
fi #+ Π΅ΡΠ»ΠΈ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΆΠΈΠ²ΠΎΠΉ ΠΎΡΠΎΠ±ΠΈ
}
# =========================================================
# main ()
# ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π°.
initial=( `cat "$startfile" | sed -e '/#/d' | tr -d '\n' |\
sed -e 's/\./\. /g' -e 's/_/_ /g'` )
# Π£Π΄Π°Π»ΠΈΡΡ ΡΡΡΠΎΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° '#' -- ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
# Π£Π΄Π°Π»ΠΈΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
clear # ΠΡΠΈΡΡΠΊΠ° ΡΠΊΡΠ°Π½Π°.
echo # ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
echo "======================="
echo " $GENERATIONS ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ"
echo " Π²"
echo " ΠΈΠ³ΡΠ΅ \" ΠΠΠΠΠ¬\""
echo "======================="
# -------- ΠΡΠ²Π΅ΡΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅. --------
Gen0=`echo ${initial[@]}`
display "$Gen0" # Π’Π»ΡΠΊΠΎ Π²ΡΠ²ΠΎΠ΄.
echo; echo
echo "ΠΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ $generation -- ΠΆΠΈΠ²ΡΡ ΠΎΡΠΎΠ±Π΅ΠΉ $alive"
# -------------------------------------------
let "generation += 1" # ΠΠ°ΡΠ°ΡΡΠΈΡΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ.
echo
# ------- ΠΡΠ²Π΅ΡΡΠΈ Π²ΡΠΎΡΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅. -------
Cur=`echo ${initial[@]}`
next_gen "$Cur" # ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ.
# ------------------------------------------
let "generation += 1" # ΠΠ°ΡΠ°ΡΡΠΈΡΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ.
# ------ ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΊΠ» ΠΈΠ³ΡΡ ------
while [ "$generation" -le "$GENERATIONS" ]
do
Cur="$avar"
next_gen "$Cur"
let "generation += 1"
done
# ==============================================================
echo
exit 0
# --------------------------------------------------------------
# ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΡ.
# ΠΡΠ°Π½ΠΈΡΠ½ΡΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΡΠ²Π΅ΡΡ Ρ, ΡΠ½ΠΈΠ·Ρ ΠΈ ΡΠ±ΠΎΠΊΠΎΠ² ΠΎΡΡΠ°ΡΡΡΡ ΠΏΡΡΡΡΠΌΠΈ.
# Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅: ΠΠΎΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ,
# + Π»Π΅Π²Π°Ρ ΠΈ ΠΏΡΠ°Π²Π°Ρ ΡΡΠΎΡΠΎΠ½Ρ ΠΊΠ°ΠΊ Π±Ρ "ΡΠΎΠΏΡΠΈΠΊΠ°ΡΠ°Π»ΠΈΡΡ",
# + ΡΠ°ΠΊ ΠΆΠ΅ ΠΈ Π²Π΅ΡΡ Π½ΡΡ ΠΈ Π½ΠΈΠΆΠ½ΡΡ ΡΡΠΎΡΠΎΠ½Ρ.
ΠΡΠΈΠΌΠ΅Ρ A-12. Π€Π°ΠΉΠ» Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΈΠ³ΡΡ "ΠΠΈΠ·Π½Ρ"
# ΠΡΠΎ ΡΠ°ΠΉΠ»-ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ "ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ 0", Π΄Π»Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ "life.sh".
# --------------------------------------------------------------
# ΠΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ 10 x 10, ΡΠΎΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ "ΠΆΠΈΠ²Π°Ρ" ΠΎΡΠΎΠ±Ρ,
#+ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ -- ΠΏΡΡΡΠ°Ρ ΡΡΠ΅ΠΉΠΊΠ°. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π΅Π»Ρ,
#+ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΡΡΡΡ ΡΡΠ΅Π΅ΠΊ, ΠΈΠ·-Π·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π² Bash.
# [Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ: ΠΎΠ±ΡΡΡΠ½ΠΈΡΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ?.]
#
# Π‘ΡΡΠΎΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° '#' ΡΡΠΈΡΠ°ΡΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ, ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ.
__.__..___
___._.____
____.___..
_._______.
____._____
..__...___
____._____
___...____
__.._..___
_..___..__
+++
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π° ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ» Mark Moraes, ΠΈΠ· ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° Π² Π’ΠΎΡΠΎΠ½ΡΠΎ. Π‘ΠΌ. ΡΠ°ΠΉΠ» "Moraes-COPYRIGHT", ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Π°Π²ΡΠΎΡΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²Π°.
ΠΡΠΈΠΌΠ΅Ρ A-13. behead: Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈΠ· ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΠΏΠΈΡΠ΅ΠΌ ΠΈ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ
#! /bin/sh
# Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈΠ· ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΠΏΠΈΡΠ΅ΠΌ ΠΈ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ Ρ.Π΅. Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΉ
# ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
# Mark Moraes, Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ Π² Π’ΠΎΡΠΎΠ½ΡΠΎ
# ==> Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π°Π²ΡΠΎΡΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
if [ $# -eq 0 ]; then
# ==> ΠΡΠ»ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π΅ Π·Π°Π΄Π°Π½ (ΡΠ°ΠΉΠ»), ΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° stdin.
sed -e '1,/^$/d' -e '/^[ ]*$/d'
# --> Π£Π΄Π°Π»ΠΈΡΡ ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ
else
# ==> ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π·Π°Π΄Π°Π½, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°.
for i do
sed -e '1,/^$/d' -e '/^[ ]*$/d' $i
# --> Π’ΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π²ΡΡΠ΅.
done
fi
# ==> Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅: ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ.
# ==>
# ==> ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ -- ΠΊΠ°ΠΊ ΠΏΠΎΡ ΠΎΠΆΠΈ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ sed, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.
# ==> ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΅Π³ΠΎ ΠΎΡΠΎΡΠΌΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ? ΠΠΎΡΠ΅ΠΌΡ Π΄Π° ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅Ρ?
ΠΡΠΈΠΌΠ΅Ρ A-14. ftpget: Π‘ΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ftp
#! /bin/sh
# $Id: ftpget,v 1.2 91/05/07 21:15:43 moraes Exp $
# Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ftp-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.
# ΠΡΠΎΡΡΠΎΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ - Π½Π°ΠΏΠΈΡΠ°Π½ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ftplist
# -h -- ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ (ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ prep.ai.mit.edu)
# -d -- ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ - Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ -d
# ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΡΠΈ,
# Π±ΡΠ΄ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ ΠΏΡΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
# (ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ -- ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ftp)
# -v -- "ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΠΉ" ΡΠ΅ΠΆΠΈΠΌ, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π²ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ ftp-ΡΠ΅ΡΠ²Π΅ΡΠ°
# -f -- file[:localfile] ΡΠΊΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ file ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ localfile
# -m -- ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ mget. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π²Π·ΡΡΡ Π² ΠΊΠ°Π²ΡΡΠΊΠΈ!
# -c -- Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
# ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
# ftpget -h expo.lcs.mit.edu -d contrib -f xplaces.shar:xplaces.sh \
# -d ../pub/R3/fixes -c ~/fixes -m 'fix*'
# ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π³ΡΡΠ·ΠΈΡ ΡΠ°ΠΉΠ» xplaces.shar ΠΈΠ· ~ftp/contrib Ρ expo.lcs.mit.edu
# ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ xplaces.sh Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π·Π°ΡΠ΅ΠΌ Π·Π°Π±Π΅ΡΠ΅Ρ Π²ΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (fixes)
# ΠΈΠ· ~ftp/pub/R3/fixes ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡ ΠΈΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ~/fixes.
# ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ
# ΠΎΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ ftp-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
#
# Mark Moraes ( [email protected]), Feb 1, 1989
#
# ==> ΠΡΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π°Π²ΡΠΎΡΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
# PATH=/local/bin:/usr/ucb:/usr/bin:/bin
# export PATH
# ==> ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΈ.
TMPFILE=/tmp/ftp.$$
# ==> Π‘ΠΎΠ·Π΄Π°Π½ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»
SITE=`domainname`.toronto.edu
# ==> 'domainname' ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ 'hostname'
usage="ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: $0 [-h ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ_ΡΠ΅ΡΠ²Π΅Ρ] [-d ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ_ΠΊΠ°ΡΠ°Π»ΠΎΠ³]... [-f ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ_ΡΠ°ΠΉΠ»:Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ_ΡΠ°ΠΉΠ»]... \
[-c Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ_ΠΊΠ°ΡΠ°Π»ΠΎΠ³] [-m ΡΠ°Π±Π»ΠΎΠ½_ΠΈΠΌΠ΅Π½_ΡΠ°ΠΉΠ»ΠΎΠ²] [-v]"
ftpflags="-i -n"
verbflag=
set -f # ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² (globbing) Π΄Π»Ρ ΠΎΠΏΡΠΈΠΈ -m
set x `getopt vh:d:c:m:f: $*`
if [ $? != 0 ]; then
echo $usage
exit 65
fi
shift
trap 'rm -f ${TMPFILE} ; exit' 0 1 2 3 15
echo "user anonymous ${USER-gnu}@${SITE} > ${TMPFILE}"
# ==> ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΊΠ°Π²ΡΡΠΊΠΈ (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ).
echo binary >> ${TMPFILE}
for i in $* # ==> Π Π°Π·Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
do
case $i in
-v) verbflag=-v; echo hash >> ${TMPFILE}; shift;;
-h) remhost=$2; shift 2;;
-d) echo cd $2 >> ${TMPFILE};
if [ x${verbflag} != x ]; then
echo pwd >> ${TMPFILE};
fi;
shift 2;;
-c) echo lcd $2 >> ${TMPFILE}; shift 2;;
-m) echo mget "$2" >> ${TMPFILE}; shift 2;;
-f) f1=`expr "$2" : "\([^:]*\).*"`; f2=`expr "$2" : "[^:]*:\(.*\)"`;
echo get ${f1} ${f2} >> ${TMPFILE}; shift 2;;
--) shift; break;;
esac
done
if [ $# -ne 0 ]; then