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

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

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

[ [email protected] ~]$ foo=file.txt.zip

[ [email protected] ~]$ echo ${foo#*.}

txt.zip

[ [email protected] ~]$ echo ${foo##*.}

zip

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹:

${ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€%шаблон}

${ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€%%шаблон}

Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΡ‹ # ΠΈ ##, прСдставлСнныС Π²Ρ‹ΡˆΠ΅, Π½ΠΎ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ тСкст с ΠΊΠΎΠ½Ρ†Π° строки, содСрТащСйся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅.

[ [email protected] ~]$ foo=file.txt.zip

[ [email protected] ~]$ echo ${foo%.*}

file.txt

[ [email protected] ~]$ echo ${foo%%.*}

file

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹:

${ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€/шаблон/строка}

${ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€//шаблон/строка}

${ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€/#шаблон/строка}

${ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€/%шаблон/строка}

Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ поиск с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Π² содСрТимом ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Если Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ совпадСниС с шаблоном, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Π΅ символы, это совпадСниС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ содСрТимым ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ строки. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ совпадСниС с шаблоном. Π€ΠΎΡ€ΠΌΠ° // Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ всС Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ совпадСния. Π€ΠΎΡ€ΠΌΠ° /# выполняСт Π·Π°ΠΌΠ΅Π½Ρƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли совпадСниС с шаблоном Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² самом Π½Π°Ρ‡Π°Π»Π΅ строки, Π° Ρ„ΠΎΡ€ΠΌΠ° /% выполняСт Π·Π°ΠΌΠ΅Π½Ρƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли совпадСниС Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ строки. Π§Π°ΡΡ‚ΡŒ /строка ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° совпавший Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½.

[ [email protected] ~]$ foo=JPG.JPG

[ [email protected] ~]$ echo ${foo/JPG/jpg}

jpg.JPG

[ [email protected] ~]$ echo ${foo//JPG/jpg}

jpg.jpg

[ [email protected] ~]$ echo ${foo/#JPG/jpg}

jpg.JPG

[ [email protected] ~]$ echo ${foo/%JPG/jpg}

JPG.jpg

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² β€” Ρ†Π΅Π½Π½Ρ‹ΠΉ инструмСнт. Π•Π³ΠΎ возмоТности для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ sed ΠΈ cut. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки способствуСт ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сцСнария Π·Π° счСт отсутствия нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ внСшниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ longest-word ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Ρ‹, задСйствовав подстановку ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ${#j} Π²Π·Π°ΠΌΠ΅Π½ подстановки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ $(echo $j | wc -c), которая ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ выполняСтся Π² ΠΏΠΎΠ΄Β­ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅:

#!/bin/bash

# longest-word3 : поиск самой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ строки Π² Ρ„Π°ΠΉΠ»Π΅

for i; do

if [[ -r $i ]]; then

max_word=

max_len=

for j in $(strings $i); do

len=${#j}

if (( len > max_len )); then

max_len=$len

max_word=$j

fi

done

echo "$i: '$max_word' ($max_len characters)"

fi

shift

done

Π”Π°Π»Π΅Π΅, сравним ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π΄Π²ΡƒΡ… вСрсий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ time:

[ [email protected] ~]$ time longest-word2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 characters)

real 0m3.618s

user 0m1.544s

sys 0m1.768s

[ [email protected] ~]$ time longest-word3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 characters)

real 0m0.060s

user 0m0.056s

sys 0m0.008s

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ 3,618 сСкунды, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ», Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΎΠΉ вСрсии, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², понадобилось всСго 0,06 сСкунды β€” вСсьма сущСствСнноС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅.

ВычислСниС ΠΈ подстановка арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ


Π’ Π³Π»Π°Π²Π΅ 7 ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подстановки Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния Ρ€Π°Π·Π½Ρ‹Ρ… арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами. НиТС приводится Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис

$((Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅))

Π³Π΄Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” это любоС допустимоС арифмСтичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Он тСсно связан с составной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ (( )), использовавшСйся Π² Π³Π»Π°Π²Π΅ 27 для вычислСния арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (ΠΎΡ†Π΅Π½ΠΊΠΈ истинности).

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

ОснованиС систСмы счислСния


Π’ Π³Π»Π°Π²Π΅ 9 ΠΌΡ‹ познакомились с Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ (Π² систСмС счислСния с основаниСм 8) ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ (Π² систСмС счислСния с основаниСм 16) числами. Π’ арифмСтичСских выраТСниях командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ цСлочислСнныС константы Π² систСмах счислСния с Π»ΡŽΠ±Ρ‹ΠΌ основаниСм. Π’ Ρ‚Π°Π±Π». 34.1 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Ρ„ΠΎΡ€ΠΌΡ‹ записи чисСл с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ основания систСмы счислСния.

Π’Π°Π±Π»ΠΈΡ†Π° 34.1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ основания систСмы счислСния

Π€ΠΎΡ€ΠΌΠ° записи

ОписаниС

Число

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ числа Π±Π΅Π· упоминания систСмы счислСния ΠΈΠ½Ρ‚Π΅Ρ€Β­ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ дСсятичныС числа (Π² систСмС счислСния с основаниСм 10)

0число

Π’ арифмСтичСских выраТСниях числа, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с нуля, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ (Π² систСмС счислСния с основаниСм 8)

0xчисло

Π€ΠΎΡ€ΠΌΠ° записи ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… чисСл

основаниС#число

Число Π² систСмС счислСния с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ основаниСм


НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

[ [email protected] ~]$ echo $((0xff))

255

[ [email protected] ~]$ echo $((2#11111111))

255

Π’ этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… выводится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ числа ff (наибольшСС Π΄Π²ΡƒΡ…Π·Π½Π°Ρ‡Π½ΠΎΠ΅ число) ΠΈ наибольшСС Π²ΠΎΡΡŒΠΌΠΈΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ число (Π² систСмС счислСния с основаниСм 2).

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹


ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° ΡƒΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, + ΠΈ -, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для обозначСния ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл соотвСтствСнно.

ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°


Π’ Ρ‚Π°Π±Π». 34.2 пСрСчислСны ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

Π’Π°Π±Π»ΠΈΡ†Π° 34.2. АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

ОписаниС

+

Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅

-

Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅

*

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅

/

ЦСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅

**

Π‘Ρ‚Π΅ΠΏΠ΅Π½ΡŒ числа

%

Π”Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ (остаток ΠΎΡ‚ цСлочислСнного дСлСния)


ДСйствия Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ· пСрСчислСнных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ вопросов, ΠΊΡ€ΠΎΠΌΠ΅ цСлочислСнного дСлСния ΠΈ дСлСния ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ обсуТдСния.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ дСлСния всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число:

[ [email protected] ~]$ echo $(( 5 / 2 ))

2

Π­Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ опрСдСлСния остатка ΠΎΡ‚ дСлСния:

[ [email protected] ~]$ echo $(( 5 % 2 ))

1

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ дСлСния ΠΈ дСлСния ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 5 Π½Π° 2 Π΄Π°Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ 2 с остатком 1.

ВычислСниС остатка ΠΎΡ‚ дСлСния ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π°Ρ…. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ выводится строка чисСл, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ числа, ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 5:

#!/bin/bash

# modulo : дСмонстрация ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° дСлСния ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ

for ((i = 0; i <= 20; i = i + 1)); do

remainder=$((i % 5))

if (( remainder == 0 )); then

printf "<%d> " $i

else

printf "%d " $i

fi

done

printf "\n"

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

[ [email protected] ~]$ modulo

<0> 1 2 3 4 <5> 6 7 8 9 <10> 11 12 13 14 <15> 16 17 18 19 <20>

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅


Π₯отя Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС это Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ арифмСтичСскиС выраТСния ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ присваивания. ΠœΡ‹ ΡƒΠΆΠ΅ выполняли присваиваниС ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·, хотя ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… контСкстах. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, пСрСдавая ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ число, ΠΌΡ‹ выполняСм присваиваниС. Π’ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² арифмСтичСских выраТСниях:

[ [email protected] ~]$ foo=

[ [email protected] ~]$ echo $foo

[ [email protected] ~]$ if (( foo = 5 ));then echo "It is true."; fi

It is true.

[ [email protected] ~]$ echo $foo

5

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ сначала присвоили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ foo пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π”Π°Π»Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρƒ if с составной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ (( foo = 5 )). Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° интСрСсных аспСкта: (1) ΠΎΠ½Π° присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ foo ΠΈ (2) ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ истинноС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ присваиваниС ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π’Π°ΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° = Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ Π·Π½Π°ΠΊ = выполняСт присваиваниС: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ foo = 5 Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ foo Ρ€Π°Π²Π½Ρ‹ΠΌ 5Β». Π”Π²ΠΎΠΉΠ½ΠΎΠΉ Π·Π½Π°ΠΊ == опрСдСляСт ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ foo == 5 Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ foo Ρ€Π°Π²Π½Π° 5?Β» Π­Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° test ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ Π·Π½Π°ΠΊ = ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния строк. Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ соврСмСнныС составныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ [[ ]] ΠΈ (( )) вмСсто test.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ = командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Ρ‰Π΅ нСсколько ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² присваивания, пСрСчислСнных Π² Ρ‚Π°Π±Π». 34.3.

Π’Π°Π±Π»ΠΈΡ†Π° 34.3. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания

Π€ΠΎΡ€ΠΌΠ° записи

ОписаниС

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ присваиваниС. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ += Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ со слоТСниСм. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ + Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -= Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ с Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ΠΌ. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ *= Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ с ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ? Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ /= Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ с цСлочислСнным Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ? Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ %= Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ с Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ. Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ % Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅