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

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

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

}


Check_if_root () # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

{ # ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° "ex39.sh".

if [ "$UID" -ne "$ROOT_UID" ]

then

echo "Π­Ρ‚ΠΎΡ‚ сцСнарий Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ с привилСгиями root."

exit $E_NOTROOT

fi

}


CreateTempfileName () # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ "ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ" ΠΈΠΌΠ΅Π½ΠΈ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

{ # Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° "ex51.sh".

prefix=temp

suffix=`eval date +%s`

Tempfilename=$prefix.$suffix

}


isalpha2 () # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, состоит Π»ΠΈ строка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹Ρ… символов.

{ # Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° "isalpha.sh".

[ $# -eq 1 ] || return $FAILURE


case $1 in

*[!a-zA-Z]*|"") return $FAILURE;;

*) return $SUCCESS;;

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

}


abs () # ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

{ # Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΈΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

# Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 255.

E_ARGERR=-999999


if [ -z "$1" ] # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

then

return $E_ARGERR # Код ошибки, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Π² Ρ‚Π°ΠΊΠΈΡ… случаях.

fi


if [ "$1" -ge 0 ] # Если Π½Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅,

then #

absval=$1 # ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ.

else # Π˜Π½Π°Ρ‡Π΅,

let "absval = (( 0 - $1 ))" # ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°ΠΊ.

fi


return $absval

}


tolower () # ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строк символов Π² Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр

{


if [ -z "$1" ] # Если Π½Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°,

then #+ Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС

echo "(null)"

return #+ ΠΈ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

fi


echo " [email protected]" | tr A-Z a-z

# ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ всС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ( [email protected]).


return


# Для записи Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ подстановки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

# НапримСр:

# oldvar="A seT of miXed-caSe LEtTerS"

# newvar=`tolower "$oldvar"`

# echo "$newvar" # a set of mixed-case letters

#

# Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° символов Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.

# toupper() [это довольно просто].

}


Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ясности ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², выдСляйтС ΠΈΡ… особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

## Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!

rm -rf *.zzy ## ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ "-rf", Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ "rm", Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ опасна,

##+ особСнно ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.


#+ ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ коммСнтария Π½Π° Π½ΠΎΠ²ΠΎΠΉ строкС.

# Π­Ρ‚ΠΎ пСрвая строка коммСнтария

#+ это вторая строка коммСнтария,

#+ это послСдняя строка коммСнтария.


#* ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.


#o Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ списка.


#> ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

while [ "$var1" != "end" ] #> while test "$var1" != "end"


Для создания Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ if-test.

#!/bin/bash


COMMENT_BLOCK=

# Если ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‡Π΅ΠΌ Π½ΠΈΠ±ΡƒΠ΄ΡŒ,

#+ Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.


if [ $COMMENT_BLOCK ]; then


Π‘Π»ΠΎΠΊ коммСнтария --

=================================

Π­Ρ‚ΠΎ строка коммСнтария.

Π­Ρ‚ΠΎ другая строка коммСнтария.

Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° строка коммСнтария.

=================================


echo "Π­Ρ‚Π° строка Π½Π΅ выводится."


Π­Ρ‚ΠΎΡ‚ Π±Π»ΠΎΠΊ коммСнтария Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сообщСния ΠΎΠ± ошибкС! ΠšΡ€ΡƒΡ‚ΠΎ!


fi


echo "Π­Ρ‚Π° строка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° Π½Π° stdout."


exit 0


Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ создания Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² со встроСнным Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΡΡ для создания Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слуТСбной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $?, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ -- являСтся Π»ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ†Π΅Π»Ρ‹ΠΌ числом.

#!/bin/bash


SUCCESS=0

E_BADINPUT=65


test "$1" -ne 0 -o "$1" -eq 0 2>/dev/null

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°: "Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ".

# 2>/dev/null ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….


if [ $? -ne "$SUCCESS" ]

then

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

exit $E_BADINPUT

fi


let "sum = $1 + 25" # Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли $1 Π½Π΅ являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом.

echo "Sum = $sum"


# Π›ΡŽΠ±Π°Ρ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.


exit 0


Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… функциями Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, 0 - 255 -- ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. Иногда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ вСсьма ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ использованиС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· запись Π² stdout.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 33-10. НСобычный способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния

#!/bin/bash

# multiplication.sh


multiply () # Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСт ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ всСх ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

{

local product=1


until [ -z "$1" ] # Пока Π½Π΅ дошли Π΄ΠΎ послСднСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°...

do

let "product *= $1"

shift

done


echo $product # Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π½Π° экран,

} #+ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ записано Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.


mult1=15383; mult2=25211

val1=`multiply $mult1 $mult2`

echo "$mult1 X $mult2 = $val1"

# 387820813


mult1=25; mult2=5; mult3=20

val2=`multiply $mult1 $mult2 $mult3`

echo "$mult1 X $mult2 X $mult3 = $val2"

# 2500


mult1=188; mult2=37; mult3=25; mult4=47

val3=`multiply $mult1 $mult2 $mult3 $mult4`

echo "$mult1 X $mult2 X $mult3 X mult4 = $val3"

# 8173300


exit 0

Π’Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ срабатываСт ΠΈ для строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, функция ΠΌΠΎΠΆΠ΅Ρ‚ "Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ" ΠΈ нСчисловой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

capitalize_ichar () # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ всСх строковых Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

{ #+ пСрСводится Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.


string0=" [email protected]" # ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.


firstchar=${string0:0:1} # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ.

string1=${string0:1} # ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ строки.


FirstChar=`echo "$firstchar" | tr a-z A-Z`

# ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.


echo "$FirstChar$string1" # Π’Ρ‹Π΄Π°Ρ‚ΡŒ Π½Π° stdout.


}


newstring=`capitalize_ichar "each sentence should start with a capital letter."`

echo "$newstring" # Each sentence should start with a capital letter.


Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот ΠΏΡ€ΠΈΠ΅ΠΌ, функция ΠΌΠΎΠΆΠ΅Ρ‚ "Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ" Π΄Π°ΠΆΠ΅ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 33-11. НСобычный способ получСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

#!/bin/bash

# sum-product.sh

# Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ "Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ" нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.


sum_and_product () # ВычисляСт сумму ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

{

echo $(( $1 + $2 )) $(( $1 * $2 ))

# Π’Ρ‹Π²ΠΎΠ΄ Π½Π° stdout Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ.

}


echo

echo "ΠŸΠ΅Ρ€Π²ΠΎΠ΅ число: "

read first


echo

echo "Π’Ρ‚ΠΎΡ€ΠΎΠ΅ число: "

read second

echo


retval=`sum_and_product $first $second` # ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

sum=`echo "$retval" | awk '{print $1}'` # ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΏΠΎΠ»Π΅).

product=`echo "$retval" | awk '{print $2}'` # Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΏΠΎΠ»Π΅).


echo "$first + $second = $sum"

echo "$first * $second = $product"

echo


exit 0

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ…ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ -- ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° массива Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈ "Π²ΠΎΠ·Π²Ρ€Π°Ρ‚" массива ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° массива Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ выполняСтся посрСдством записи элСмСнтов массива, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ подстановки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ, слСдуя Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ стратСгии, Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π²ΠΎΠ΄ Π½Π° stdout, Π° Π·Π°Ρ‚Π΅ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ всС Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ подстановки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ( ... ) -- Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² массив.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 33-12. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° массива Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ массива ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

#!/bin/bash

# array-function.sh: ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° массива Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ...

# "Π²ΠΎΠ·Π²Ρ€Π°Ρ‚" массива ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ


Pass_Array ()

{

local passed_array # Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная.

passed_array=( `echo "$1"` )

echo "${passed_array[@]}"

# Бписок всСх элСмСнтов Π² Π½ΠΎΠ²ΠΎΠΌ массивС,

#+ объявлСнном ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

}


original_array=( element1 element2 element3 element4 element5 )


echo

echo "original_array = ${original_array[@]}"

# Бписок всСх элСмСнтов исходного массива.


# Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ массив Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

# **********************************

argument=`echo ${original_array[@]}`

# **********************************

# ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠ² всС элСмСнты массива Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ,

#+ раздСляя ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ.

#

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΌΠ΅Ρ‚ΠΎΠ΄ прямой ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ массива Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π΅ сработаСт.


# Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

# *****************************************

returned_array=( `Pass_Array "$argument"` )

# *****************************************

# Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-массив.


echo "returned_array = ${returned_array[@]}"


echo "============================================================="


# А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ массиву

#+ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Pass_Array "$argument"


# Ѐункция Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ массив, Π½ΠΎ...

#+ доступ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ массиву, Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, окаТСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½.

echo "Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ массив (Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) = ${passed_array[@]}"

# "ΠŸΠ£Π‘Π’ΠžΠ•" Π—ΠΠΠ§Π•ΠΠ˜Π•, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это локальная пСрСмСнная.


echo


exit 0

Π‘ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ массивов Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-11.

ИспользованиС конструкций с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ присвоСния ΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ оформлСния Ρ†ΠΈΠΊΠ»ΠΎΠ² for ΠΈ while. Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-12 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-17.

Иногда ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ "ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ" Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. ОсобСнно это относится ΠΊ tr ΠΈ grep.

# Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° "wstrings.sh".


wlist=`strings "$1" | tr A-Z a-z | tr '[:space:]' Z | \

tr -cs '[:alpha:]' Z | tr -s '\173-\377' Z | tr Z ' '`


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 33-13. Π˜Π³Ρ€Ρ‹ с Π°Π½Π°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ

#!/bin/bash

# agram.sh: Π˜Π³Ρ€Ρ‹ с Π°Π½Π°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ.