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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка Linux. ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 90

Автор Уильям Шоттс

НачнСм с простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. НапишСм сцСнарий Π½Π° языкС bc, ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄Π²Π° числа β€” 2 ΠΈ 2:

/* ΠžΡ‡Π΅Π½ΡŒ простой сцСнарий Π½Π° языкС bc */

2 + 2

ΠŸΠ΅Ρ€Π²Π°Ρ строка сцСнария β€” это ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. Для оформлСния ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² языкС bc ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис, Ρ‡Ρ‚ΠΎ ΠΈ Π² языкС программирования C. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках, Π½Π°Ρ‡ΠΈΠ½Π°ΡΡΡŒ с ΠΏΠ°Ρ€Ρ‹ символов /* ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡΡΡŒ ΠΏΠ°Ρ€ΠΎΠΉ */.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ bc


Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠΌ сцСнарий, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅, Π² Ρ„Π°ΠΉΠ»Π΅ foo.bc, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

[ [email protected] ~]$ bc foo.bc

bc 1.06.94

Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation,

Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type `warranty'.

4

ΠŸΡ€ΠΈΠ³Π»ΡΠ΄Π΅Π²ΡˆΠΈΡΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² самом Π½ΠΈΠ·Ρƒ, послС сообщСния с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± авторских ΠΏΡ€Π°Π²Π°Ρ…. Π’Ρ‹Π²ΠΎΠ΄ этого сообщСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -q (quiet β€” Π±Π΅Π·ΠΌΠΎΠ»Π²Π½ΠΎ).

bc Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅:

[ [email protected] ~]$ bc -q

2 + 2

4

quit

Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΌΡ‹ просто Π²Π²ΠΎΠ΄ΠΈΠΌ выраТСния ΠΈ сразу ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Команда quit Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ сСанс.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ сцСнарий Π½Π° стандартный Π²Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ bc:

[ [email protected] ~]$ bc < foo.bc

4

Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сцСнарии с использованиСм встроСнных Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², встроСнных строк ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ². НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ со встроСнной строкой:

[ [email protected] ~]$ bc <<< "2+2"

4

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сцСнария


Π’ качСствС практичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° сконструируСм сцСнарий, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ сумму СТСмСсячных ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρƒ. Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сцСнария ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ bc Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ встроСнный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚:

#!/bin/bash

# loan-calc : сцСнарий вычислСния суммы СТСмСсячных ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρƒ

PROGNAME=$(basename $0)

usage () {

cat <<- EOF

Usage: $PROGNAME PRINCIPAL INTEREST MONTHS

Where:

PRINCIPAL is the amount of the loan.

INTEREST is the APR as a number (7% = 0.07).

MONTHS is the length of the loan's term.

EOF

}

if (($# != 3)); then

usage

exit 1

fi

principal=$1

interest=$2

months=$3

bc <<- EOF

scale = 10

i = $interest / 12

p = $principal

n = $months

a = p * ((i * ((1 + i) ^ n)) / (((1 + i) ^ n) - 1))

print a, "\n"

EOF

Запустив этот сцСнарий, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

[ [email protected] ~]$ loan-calc 135000 0.0775 180

1270.7222490000

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вычисляСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ СТСмСсячных ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρƒ Π½Π° сумму $135 000, Π²Ρ‹Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ΄ 7,75 % Π³ΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π½Π° 180 мСсяцСв (15 Π»Π΅Ρ‚). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Она опрСдСляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ scale Π² сцСнарии Π½Π° языкС bc. ПолноС описаниС языка bc ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° справочной страницС (man) для bc. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° записи матСматичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ (bc большС Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ язык C), Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ сцСнария всС ΠΆΠ΅ выглядит достаточно понятной, учитывая всС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΊ настоящСму ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ.

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅


Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ мноТСство ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… хитростСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² практичСской Ρ€Π°Π±ΠΎΡ‚Π΅. Π‘ ростом ΠΎΠΏΡ‹Ρ‚Π° Π² создании сцСнариСв ΡƒΠΌΠ΅Π½ΠΈΠ΅ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со строками ΠΈ числами ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΈΠ½Π½ΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Наш сцСнарий loan-calc ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ простыС сцСнарии ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ вычислСния.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния


Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сцСнарий loan-calc Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΎΠ½ Π΄Π°Π»Π΅ΠΊ ΠΎΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π°. Π’ качСствС ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ упраТнСния ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ сцСнарий loan-calc, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности:

β€’ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки;

β€’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Β«ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉΒ» Ρ€Π΅ΠΆΠΈΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сцСнарий Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ суммы, ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° ΠΈ срока ΠΊΡ€Π΅Π΄ΠΈΡ‚Π°;

β€’ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π°.

35. ΠœΠ°ΡΡΠΈΠ²Ρ‹


Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ со строками ΠΈ числами. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассматривали Π΄ΠΎ сих ΠΏΠΎΡ€, Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΊΡ€ΡƒΠ³Π°Ρ… извСстны ΠΊΠ°ΠΊ скалярныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, способныС Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ СдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ познакомимся Π΅Ρ‰Π΅ с ΠΎΠ΄Π½ΠΎΠΉ структурой Π΄Π°Π½Π½Ρ‹Ρ…, которая называСтся массивом, способной Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ практичСски Π²ΠΎ всСх языках программирования. Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ…, хотя ΠΈ Π² нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Но Π΄Π°ΠΆΠ΅ Π² этом случаС ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ программирования.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ массивы?


ΠœΠ°ΡΡΠΈΠ²Ρ‹ β€” это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, хранящиС Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. ЭлСктронная Ρ‚Π°Π±Π»ΠΈΡ†Π° дСйствуСт ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ массиву. Π’ Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ строки ΠΈ столбцы, ΠΈ каТдая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ячСйка ΠΈΠΌΠ΅Π΅Ρ‚ свой адрСс, опрСдСляСмый Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ строки ΠΈ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ столбца. Массив устроСн Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. Массив состоит ΠΈΠ· ячССк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ элСмСнтами, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт содСрТит Π΄Π°Π½Π½Ρ‹Π΅. Доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту осущСствляСтся с использованиСм Π΅Π³ΠΎ адрСса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся индСксом.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. ЭлСктронная Ρ‚Π°Π±Π»ΠΈΡ†Π° β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива с двумя измСрСниями: ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ высота. МногиС языки ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ массивы с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ числом ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‡Π°Ρ‰Π΅ всСго, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²ΡƒΡ…- ΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² bash ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ СдинствСнным ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ элСктронныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с СдинствСнным столбцом. Но Π΄Π°ΠΆΠ΅ с этим ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ массивам ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ массу ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° массивов появилась Π² bash вСрсии 2. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Unix sh Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π° ΠΈΡ….

БозданиС массива


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ-массивам ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ bash, ΠΈ ΠΎΠ½ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ. НапримСр:

[ [email protected] ~]$ a[1]=foo

[ [email protected] ~]$ echo ${a[1]}

foo

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ присваивания значСния элСмСнту массива ΠΈ обращСния ΠΊ Π½Π΅ΠΌΡƒ. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ foo элСмСнту массива a с индСксом 1. Вторая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, хранящССся Π² элСмСнтС с индСксом 1. ИспользованиС Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ условиСм, ΠΈΠ½Π°Ρ‡Π΅ команд­ная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ подстановку ΠΏΡƒΡ‚ΠΈ, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° имя элСмСнта массива.

Массив ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ declare:

[ [email protected] ~]$ declare -a a

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -a Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ declare ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив (array) с ΠΈΠΌΠ΅Π½Π΅ΠΌ a.

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массиву


ЗначСния элСмСнтам массивов ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… способов. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ осущСствляСтся с использованиСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ синтаксиса:

имя[индСкс]=Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π³Π΄Π΅ имя β€” это имя массива, индСкс β€” Ρ†Π΅Π»ΠΎΠ΅ число (ΠΈΠ»ΠΈ арифмСтичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎΠ΅ 0. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0, Π° Π½Π΅ 1. Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” строка ΠΈΠ»ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число, присваиваСмоС элСмСнту массива.

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ сразу мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ с использованиСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ синтаксиса:

имя=(Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2 ...)

Π³Π΄Π΅ имя β€” это имя массива, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 ... β€” значСния, присваиваСмыС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтам массива, начиная с элСмСнта с индСксом 0. НапримСр, Ссли понадобится ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ элСмСнтам массива days сокращСнныС названия Π΄Π½Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ, это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

[ [email protected] ~]$ days=(Sun Mon Tue Wed Thu Fri Sat)

МоТно ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ значСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ элСмСнтам, указывая индСкс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния:

[ [email protected] ~]$ days=([0]=Sun [1]=Mon [2]=Tue [3]=Wed [4]=Thu [5]=Fri [6]=Sat)

Доступ ΠΊ элСмСнтам массива


Π˜Ρ‚Π°ΠΊ, Π³Π΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ массивы? Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ элСктронных Ρ‚Π°Π±Π»ΠΈΡ†, массивы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ мноТСства Π·Π°Π΄Π°Ρ‡ программирования.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сбора ΠΈ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…. НапишСм сцСнарий, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ врСмя послСднСго измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. На основС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… сцСнарий Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ, сколько Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час суток. Π’Π°ΠΊΠΎΠΉ сцСнарий ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для выяснСния ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠ² наибольшСй активности систСмы. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ hours ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

[ [email protected] ~]$ hours .

Hour Files Hour Files

---- ----- ---- -----

00 0 12 11

01 1 13 7

02 0 14 1

03 0 15 7

04 1 16 6

05 1 17 5

06 6 18 4

07 3 19 4

08 1 20 1

09 14 21 0

10 2 22 0

11 5 23 0

Total files = 80

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ запустили ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ hours, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для Π°Π½Π°Π»ΠΈΠ·Π°. Она Π²Ρ‹Π²Π΅Π»Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ число Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΡΠ²ΡˆΠΈΡ…ΡΡ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час суток (0–23). НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ΄, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ этой Ρ‚Π°Π±Β­Π»ΠΈΡ†Ρ‹:

#!/bin/bash

# hours : сцСнарий для подсчСта Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ измСнСния