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

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

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

И-список

command-1 && command-2 && command-3 && ... command-n

КаТдая ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π² Ρ‚Π°ΠΊΠΎΠΌ спискС, выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° прСдыдущая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Π΅Ρ€Π½ΡƒΠ»Π° ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ true (ноль). Если какая-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false (Π½Π΅ ноль), Ρ‚ΠΎ исполнСниС списка ΠΊΠΎΠΌΠ°Π½Π΄ Π² этом мСстС Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Ρ‚.Π΅. ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 24-1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ "И-списка"

#!/bin/bash

# "И-список"


if [ ! -z "$1" ] && echo "АргумСнт #1 = $1" && [ ! -z "$2" ] && echo "АргумСнт #2 = $2"

then

echo "Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²."

# ВсС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ true.

else

echo "Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²."

# Одна ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ Π² спискС Π²Π΅Ρ€Π½ΡƒΠ»Π° false.

fi

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: "if [ ! -z $1 ]" Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ, казалось Π±Ρ‹ эквивалСнтный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

# if [ -n $1 ] -- Π½Π΅Ρ‚. Однако, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ

# if [ -n "$1" ] Ρ‚ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹!

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΡ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π»ΡƒΡ‡ΡˆΠ΅ всСгда Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.


# Π’ΠΎ ΠΆΠ΅ самоС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Π· списка ΠΊΠΎΠΌΠ°Π½Π΄.

if [ ! -z "$1" ]

then

echo "АргумСнт #1 = $1"

fi

if [ ! -z "$2" ]

then

echo "АргумСнт #2 = $2"

echo "Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²."

else

echo "Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²."

fi

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΌΠ΅Π½Π΅Π΅ элСгантно ΠΈ Π΄Π»ΠΈΠ½Π½Π΅Π΅, Ρ‡Π΅ΠΌ с использованиСм "И-списка".


exit 0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 24-2. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ "И-списков"

#!/bin/bash


ARGS=1 # ОТидаСмоС число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

E_BADARGS=65 # Код Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Ссли число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² мСньшС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ.


test $# -ne $ARGS && echo "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: `basename $0` $ARGS Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚(Π°)(ΠΎΠ²)" && exit $E_BADARGS

# Если ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ условия Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true (Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²),

# Ρ‚ΠΎ исполняСтся ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ строки, ΠΈ сцСнарий Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.


# Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π½ΠΈΠΆΠ΅ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Ρ‹ΡˆΠ΅ Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚.

# ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° условиС "-ne" -- "Π½Π΅ Ρ€Π°Π²Π½ΠΎ" (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².)

echo "Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²."


exit 0


# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сцСнария ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ "echo $?".

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ И-списка ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ значСния ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

[email protected] # Π’ $arg1 Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.


[ -z "$arg1" ] && arg1=DEFAULT

# Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ DEFAULT, Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.


Π˜Π›Π˜-список

command-1 || command-2 || command-3 || ... command-n

КаТдая ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π² Ρ‚Π°ΠΊΠΎΠΌ спискС, выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° прСдыдущая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Π΅Ρ€Π½ΡƒΠ»Π° ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ false (Π½Π΅ ноль). Если какая-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true (ноль), Ρ‚ΠΎ исполнСниС списка ΠΊΠΎΠΌΠ°Π½Π΄ Π² этом мСстС Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Ρ‚.Π΅. ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ "Π˜Π›Π˜-списки" ΠΈΠΌΠ΅ΡŽΡ‚ смысл ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ, ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ "И-спискам"

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 24-3. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ "Π˜Π›Π˜-списков" ΠΈ "И-списков"

#!/bin/bash


# delete.sh, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° удалСния Ρ„Π°ΠΉΠ»ΠΎΠ².

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: delete имя_Ρ„Π°ΠΉΠ»Π°


E_BADARGS=65


if [ -z "$1" ]

then

echo "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: `basename $0` имя_Ρ„Π°ΠΉΠ»Π°"

exit $E_BADARGS # Если Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ имя Ρ„Π°ΠΉΠ»Π°.

else

file=$1 # Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π°.

fi


[ ! -f "$file" ] && echo "Π€Π°ΠΉΠ» \"$file\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. \

Π ΠΎΠ±ΠΊΠΈΠΉ ΠΎΡ‚ΠΊΠ°Π· удалСния Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°."

# И-БПИБОК, Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС, Ссли Ρ„Π°ΠΉΠ» Π½Π΅ сущСствуСт.

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ сообщСниС продолТаСтся Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС,

# благодаря ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.


[ ! -f "$file" ] || (rm -f $file; echo "Π€Π°ΠΉΠ» \"$file\" ΡƒΠ΄Π°Π»Π΅Π½.")

# Π˜Π›Π˜-БПИБОК, удаляСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ».


# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° логичСскиС условия.

# И-БПИБОК ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎ true, Π˜Π›Π˜-БПИБОК -- ΠΏΠΎ false.


exit 0

Бписки Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ послСднСй Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡ "И" ΠΈ "Π˜Π›Π˜" списки, Π»Π΅Π³ΠΊΠΎ "ΠΏΠ΅Ρ€Π΅ΠΌΡƒΠ΄Ρ€ΠΈΡ‚ΡŒ" с логичСскими условиями, поэтому, Π² Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°.

false && true || echo false # false


# Π’ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π°Π΅Ρ‚

( false && true ) || echo false # false

# Но Π½Π΅ эта комбинация

false && ( true || echo false ) # (Π½Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран)


# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ порядок вычислСния условий -- слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ,

#+ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ "&&" ΠΈ "||" ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π²Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚.


# Если Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² своих дСйствиях, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… слоТных конструкций.


# Бпасибо S.C.


Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-8 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 7-4, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ использованиС И/Π˜Π›Π˜-списков для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….


Π“Π»Π°Π²Π° 25. ΠœΠ°ΡΡΠΈΠ²Ρ‹

НовСйшиС вСрсии Bash ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ элСмСнтов массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅: variable[xx]. МоТно явно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив Π² сцСнарии, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ declare: declare -a variable. ΠžΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтам массива ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, Ρ‚.Π΅.: ${variable[xx]}.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 25-1. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ массив

#!/bin/bash


area[11]=23

area[13]=37

area[51]=UFOs


# ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ элСмСнтов Π² массивС Π±Ρ‹Π»Π° Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ.


# НСкоторыС элСмСнты массива ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ.

# "Π”Ρ‹Ρ€ΠΊΠΌ" Π² массивС Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибкой.


echo -n "area[11] = "

echo ${area[11]} # Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ {Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки}


echo -n "area[13] = "

echo ${area[13]}


echo "содСрТимоС area[51] = ${area[51]}."


# ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ элСмСнтам Π΄Π°Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку.

echo -n "area[43] = "

echo ${area[43]}

echo "(элСмСнт area[43] -- Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½)"


echo


# Π‘ΡƒΠΌΠΌΠ° Π΄Π²ΡƒΡ… элСмСнтов массива, записанная Π² Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт

area[5]=`expr ${area[11]} + ${area[13]}`

echo "area[5] = area[11] + area[13]"

echo -n "area[5] = "

echo ${area[5]}


area[6]=`expr ${area[11]} + ${area[51]}`

echo "area[6] = area[11] + area[51]"

echo -n "area[6] = "

echo ${area[6]}

# Π­Ρ‚Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° закончится Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ слоТСниС Ρ†Π΅Π»ΠΎΠ³ΠΎ числа со строкой Π½Π΅ допускаСтся.


echo; echo; echo


# -----------------------------------------------------------------

# Π”Ρ€ΡƒΠ³ΠΎΠΉ массив, "area2".

# И Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива...

# array_name=( XXX YYY ZZZ ... )


area2=( ноль ΠΎΠ΄ΠΈΠ½ Π΄Π²Π° Ρ‚Ρ€ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ )


echo -n "area2[0] = "

echo ${area2[0]}

# Ага, индСксация начинаСтся с нуля (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива ΠΈΠΌΠ΅Π΅Ρ‚ индСкс [0], Π° Π½Π΅ [1]).


echo -n "area2[1] = "

echo ${area2[1]} # [1] -- Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт массива.

# -----------------------------------------------------------------


echo; echo; echo


# -----------------------------------------------

# Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ массив, "area3".

# И Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ...

# array_name=([xx]=XXX [yy]=YYY ...)


area3=([17]=ΡΠ΅ΠΌΠ½Π°Π΄Ρ†Π°Ρ‚ΡŒ [21]=Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ_ΠΎΠ΄ΠΈΠ½)


echo -n "area3[17] = "

echo ${area3[17]}


echo -n "area3[21] = "

echo ${area3[21]}

# -----------------------------------------------


exit 0

Bash позволяСт ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊ массивами, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ явно ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ.

string=abcABC123ABCabc

echo ${string[@]} # abcABC123ABCabc

echo ${string[*]} # abcABC123ABCabc

echo ${string[0]} # abcABC123ABCabc

echo ${string[1]} # НичСго Π½Π΅ выводится!

# ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

echo ${#string[@]} # 1

# ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π² массивС.


# Бпасибо Michael Zick Π·Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π­Ρ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ отсутствиС контроля Ρ‚ΠΈΠΏΠΎΠ² Π² Bash.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 25-2. Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ стихотворСния

#!/bin/bash

# poem.sh


# Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΈΠ· стихотворСния (ΠΎΠ΄Π½Π° строфа).

Line[1]="Мой дядя самых чСстных ΠΏΡ€Π°Π²ΠΈΠ»,"

Line[2]="Когда Π½Π΅ Π² ΡˆΡƒΡ‚ΠΊΡƒ Π·Π°Π½Π΅ΠΌΠΎΠ³;"

Line[3]="Он ΡƒΠ²Π°ΠΆΠ°Ρ‚ΡŒ сСбя заставил,"

Line[4]="И Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³."

Line[5]="Π•Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°ΡƒΠΊΠ°..."


# Атрибуты.

Attrib[1]=" А.Π‘. ΠŸΡƒΡˆΠΊΠΈΠ½"

Attrib[2]="\"Π•Π²Π³Π΅Π½ΠΈΠΉ ОнСгин\""


for index in 1 2 3 4 5 # ΠŸΡΡ‚ΡŒ строк.

do

printf " %s\n" "${Line[index]}"

done


for index in 1 2 # Π”Π²Π΅ строки Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

do

printf " %s\n" "${Attrib[index]}"

done


exit 0

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами массива ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичСский синтаксис, Π΄Π°ΠΆΠ΅ стандартныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Bash Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами.

array=( ноль ΠΎΠ΄ΠΈΠ½ Π΄Π²Π° Ρ‚Ρ€ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΡΡ‚ΡŒ )


echo ${array[0]} # ноль

echo ${array:0} # ноль

# ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -- ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта.

echo ${array:1} # оль

# ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -- ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта,

#+ начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ #1 (со 2-Π³ΠΎ символа).


echo ${#array} # 4

# Π”Π»ΠΈΠ½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива.


array2=( [0]="ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт" [1]="Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт" [3]="Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ элСмСнт" )


echo ${array2[0]} # ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт

echo ${array2[1]} # Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт

echo ${array2[2]} #

# Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, поэтому Π½Π° экран Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ выводится.

echo ${array2[3]} # Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ элСмСнт


ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ встроСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Bash ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько ΠΈΠ½ΠΎΠΉ смысл. НапримСр, unset -- удаляСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты массива, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ массив Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 25-3. НСкоторыС спСцифичныС особСнности массивов

#!/bin/bash