Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования Π½Π° языкС сцСнариСв ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 83

Автор МСндСль ΠšΡƒΠΏΠ΅Ρ€

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