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

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

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

11 5 23 0

Total files = 80

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

#!/bin/bash

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

usage () {

echo "usage: $(basename $0) directory" >&2

}

# Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ

if [[ ! -d $1 ]]; then

usage

exit 1

fi

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив

for i in {0..23}; do hours[i]=0; done

# Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅

for i in $(stat -c %y "$1"/* | cut -c 12-13); do

j=${i/#0}

((++hours[j]))

((++count))

done

# ВывСсти Π΄Π°Π½Π½Ρ‹Π΅

echo -e "Hour\tFiles\tHour\tFiles"

echo -e "----\t-----\t----\t-----"

for i in {0..11}; do

j=$((i + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]}

done

printf "\nTotal files = %d\n" $count

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (usage) ΠΈ основного Ρ‚Π΅Π»Π° с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ провСряСтся, являСтся Π»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Если Π½Π΅Ρ‚, сцСнарий Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ порядкС использования ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ массив hours. Для этого ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм, Π½ΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² массивС Π½Π΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ элСмСнтов с пустыми значСниями. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ способ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ подстановку Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках ({0..23}), ΠΌΡ‹ смогли Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ слов для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» осущСствляСт сбор Π΄Π°Π½Π½Ρ‹Ρ…, вызывая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ stat для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ cut ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° извлСкаСтся Π΄Π²ΡƒΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ час. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° выполняСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ ΠΈΠ· поля с часом, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° попытаСтся (ΠΈ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ) ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния с 00 ΠΏΠΎ 09 ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ числа (см. Ρ‚Π°Π±Π». 34.1). Π”Π°Π»Π΅Π΅ сцСнарий ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ часу дня. НаконСц, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ счСтчик (count), хранящий ΠΎΠ±Ρ‰Π΅Π΅ число Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

ПослСдний Ρ€Π°Π·Π΄Π΅Π» Π² сцСнарии Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС массива. Π‘Π½Π°Ρ‡Π°Π»Π° выводится ΠΏΠ°Ρ€Π° строк Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ†ΠΈΠΊΠ», ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ выводится ΠΎΠ±Ρ‰Π΅Π΅ число Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с массивами


ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ мноТСство Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ массивов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², сортировка ΠΈ Π΄Ρ€., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния Π² сцСнариях.

Π’Ρ‹Π²ΠΎΠ΄ содСрТимого всСго массива


Для доступа ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ индСксы * ΠΈ @. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² случаС с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, индСкс @ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ. НапримСр:

[ [email protected] ~]$ animals=("a dog" "a cat" "a fish")

[ [email protected] ~]$ for i in ${animals[*]}; do echo $i; done

a

dog

a

cat

a

fish

[ [email protected] ~]$ for i in ${animals[@]}; do echo $i; done

a

dog

a

cat

a

fish

[ [email protected] ~]$ for i in "${animals[*]}"; do echo $i; done

a dog a cat a fish

[ [email protected] ~]$ for i in "${animals[@]}"; do echo $i; done

a dog

a cat

a fish

ΠœΡ‹ создали массив animals ΠΈ сохранили Π² Π½Π΅ΠΌ Ρ‚Ρ€ΠΈ строки ΠΏΠΎ Π΄Π²Π° слова Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ выполняСтся Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ содСрТимого массива Π½Π° слова. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ${animals[*]} ΠΈ ${animals[@]} Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ, Ссли ΠΎΠ½ΠΈ Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. ИндСкс * Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ содСрТимоС массива, Ρ€Π°Π·Π±ΠΈΡ‚ΠΎΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ слова, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ индСкс @ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ «слова», ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ «истинному» содСрТимому массива.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ числа элСмСнтов Π² массивС


ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ число элСмСнтов Π² массивС, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π΄Π»ΠΈΠ½Ρƒ строки, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². НапримСр:

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

[ [email protected] ~]$ echo ${#a[@]} # число элСмСнтов Π² массивС

1

[ [email protected] ~]$ echo ${#a[100]} # Π΄Π»ΠΈΠ½Π° элСмСнта с индСксом 100

3

ΠœΡ‹ создали массив a ΠΈ записали строку foo Π² элСмСнт с индСксом 100. Π”Π°Π»Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Ρƒ массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈ этом Ρ„ΠΎΡ€ΠΌΡƒ записи индСкса @. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Ρƒ элСмСнта с индСксом 100, содСрТащСго строку foo. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ присвоили строку элСмСнту с индСксом 100, bash сообщаСт, Ρ‡Ρ‚ΠΎ Π² массивС имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для Ρ‚Π΅Ρ… языков, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ элСмСнты массива (элСмСнты с индСксами 0–99) Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ пустыми значСниями ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ Π±Ρ‹ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива.

Поиск ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… индСксов


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

${!массив[*]}

${!массив[@]}

Π³Π΄Π΅ массив β€” это имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-массива. Как ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях использования * ΠΈ @ Π² опСрациях подстановки, Ρ„ΠΎΡ€ΠΌΠ° @, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, оказываСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ выполняСт подстановку Π½Π΅Ρ€Π°Π·Π΄Ρ€ΠΎΠ±Π»Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов:

[ [email protected] ~]$ foo=([2]=a [4]=b [6]=c)

[ [email protected] ~]$ for i in "${foo[@]}"; do echo $i; done

a

b

c

[ [email protected] ~]$ for i in "${!foo[@]}"; do echo $i; done

2

4

6

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† массива


Π—Π½Π°Π½ΠΈΠ΅ количСства элСмСнтов Π² массивС Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚, Ссли понадобится Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ значСния Π² ΠΊΠΎΠ½Π΅Ρ† массива, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ индСксами * ΠΈ @, Π½Π΅ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ наибольший занятый индСкс Π² массивС. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° прСдоставляСт собствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания += автоматичСски добавляСт значСния Π² ΠΊΠΎΠ½Π΅Ρ† массива. НиТС ΠΌΡ‹ записали Ρ‚Ρ€ΠΈ значСния Π² массив, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† Π΅Ρ‰Π΅ Ρ‚Ρ€ΠΈ.

[ [email protected] ~]$ foo=(a b c)

[ [email protected] ~]$ echo ${foo[@]}

a b c

[ [email protected] ~]$ foo+=(d e f)

[ [email protected] ~]$ echo ${foo[@]}

a b c d e f

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива


Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с элСктронными Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния. Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ прямой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сортировки, Π½ΠΎ Π΅Π΅ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ самому:

#!/bin/bash

# array-sort : сортировка массива

a=(f e d c b a)

echo "Original array: ${a[@]}"

a_sorted=($(for i in "${a[@]}"; do echo $i; done | sort))

echo "Sorted array: ${a_sorted[@]}"

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот сцСнарий, ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

[ [email protected] ~]$ array-sort

Original array: f e d c b a

Sorted array: a b c d e f

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС исходного массива (a) Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив (a_sorted), выполняя Ρ‚Ρ€ΡŽΠΊ с подстановкой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π­Ρ‚ΠΎΡ‚ простой ΠΏΡ€ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для выполнСния самых Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с массивами, просто измСняя состав ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.

УдалСниС массива


Π£Π΄Π°Π»ΠΈΡ‚ΡŒ массив ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ unset:

[ [email protected] ~]$ foo=(a b c d e f)

[ [email protected] ~]$ echo ${foo[@]}

a b c d e f

[ [email protected] ~]$ unset foo

[ [email protected] ~]$ echo ${foo[@]}

[ [email protected] ~]$

Командой unset ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ СдинствСнный элСмСнт массива:

[ [email protected] ~]$ foo=(a b c d e f)

[ [email protected] ~]$ echo ${foo[@]}

a b c d e f

[ [email protected] ~]$ unset 'foo[2]'

[ [email protected] ~]$ echo ${foo[@]}

a b d e f

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт массива, с индСксом 2. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ индСксация элСмСнтов массива начинаСтся с 0, Π° Π½Π΅ с 1! ΠžΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ элСмСнт массива Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ подстановку ΠΏΡƒΡ‚Π΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ присваиваниС пустого значСния массиву Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ содСрТимоС:

[ [email protected] ~]$ foo=(a b c d e f)

[ [email protected] ~]$ foo=

[ [email protected] ~]$ echo ${foo[@]}

b c d e f

Π›ΡŽΠ±Π°Ρ ссылка Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-массив Π±Π΅Π· индСкса Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ элСмСнт с индСксом 0:

[ [email protected] ~]$ foo=(a b c d e f)

[ [email protected] ~]$ echo ${foo[@]}

a b c d e f

[ [email protected] ~]$ foo=A

[ [email protected] ~]$ echo ${foo[@]}

A b c d e f

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


Если Π½Π° страницС справочного руководства (man) для bash Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск слова array, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ мноТСство Π΅Π³ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΉ, Π³Π΄Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ-массивами. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ этих описаний довольно Ρ‚ΡƒΠΌΠ°Π½Π½Π°, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ содСрТат вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ свСдСния. ЀактичСски массивы нСдостаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° языкС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Π² основном ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Unix (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ sh) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΡ…. Об этом нСдостаткС остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΆΠ°Π»Π΅Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ массивы ΠΎΡ‡Π΅Π½ΡŒ популярны Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ программирования.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ Π±Π»ΠΈΠ·ΠΊΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСстС. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Ρ†ΠΈΠΊΠ»Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вычислСния индСксов массива:

for ((Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3))

36. Π­ΠΊΠ·ΠΎΡ‚ΠΈΠΊΠ°


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