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

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

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

exit

;;

1) echo "Hostname: $HOSTNAME"

uptime

;;

2) df -h

;;

3) if [[ $(id -u) -eq 0 ]]; then

echo "Home Space Utilization (All Users)"

du -sh /home/*

else

echo "Home Space Utilization ($USER)"

du -sh $HOME

fi

;;

*) echo "Invalid entry" >&2

exit 1

;;

esac

Команда case Π±Π΅Ρ€Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слова β€” Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ REPLY β€” ΠΈ Π·Π°Ρ‚Π΅ΠΌ сопоставляСт Π΅Π³ΠΎ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ шаблонами. Найдя соотвСтствиС, ΠΎΠ½Π° выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, связанныС с Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ шаблоном. ПослС нахоТдСния соотвСтствия сопоставлСниС с Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ шаблонами ΡƒΠΆΠ΅ Π½Π΅ производится.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹


Π¨Π°Π±Π»ΠΎΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ case Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡƒΡ‚ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ подстановки. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ символом ). Π’ Ρ‚Π°Π±Π». 31.1 пСрСчислСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ допустимыС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹.

Π’Π°Π±Π»ΠΈΡ†Π° 31.1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ шаблонов Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ case

Π¨Π°Π±Π»ΠΎΠ½

ОписаниС

a)

БоотвСтствуСт, Ссли слово содСрТит a

[[:alpha:]])

БоотвСтствуСт, Ссли слово содСрТит СдинствСнный Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΉ символ

???)

БоотвСтствуСт, Ссли слово содСрТит Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Ρ€ΠΈ символа

*.txt)

БоотвСтствуСт, Ссли слово заканчиваСтся символами .txt

*)

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


Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт Ρ€Π°Π±ΠΎΡ‚Ρƒ шаблонов:

#!/bin/bash

read -p "enter word > "

case $REPLY in

[[:alpha:]]) echo "is a single alphabetic character." ;;

[ABC][0-9]) echo "is A, B, or C followed by a digit." ;;

???) echo "is three characters long." ;;

*.txt) echo "is a word ending in '.txt'" ;;

*) echo "is something else." ;;

esac

ОбъСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… шаблонов


ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько шаблонов, пСрСчислив ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· символ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ условный шаблон, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎ Β«Π˜Π›Π˜Β». Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ символов Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистров:

#!/bin/bash

# case-menu: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° систСмной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ,

# управляСмая с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мСню

clear

echo "

Please Select:

A. Display System Information

B. Display Disk Space

C. Display Home Space Utilization

Q. Quit

"

read -p "Enter selection [A, B, C or Q] > "

case $REPLY in

q|Q) echo "Program terminated."

exit

;;

a|A) echo "Hostname: $HOSTNAME"

uptime

;;

b|B) df -h

;;

c|C) if [[ $(id -u) -eq 0 ]]; then

echo "Home Space Utilization (All Users)"

du -sh /home/*

else

echo "Home Space Utilization ($USER)"

du -sh $HOME

fi

;;

*) echo "Invalid entry" >&2

exit 1

;;

esac

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ case-menu, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню Π²Π²ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠΊΠ², Π° Π½Π΅ Ρ†ΠΈΡ„Ρ€. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹ ΠΎΠ±ΠΎΠΈΡ… рСгистров β€” Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ.

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


Команда case являСтся ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊ нашСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² программирования. Как Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅, ΠΎΠ½Π° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² Π·Π°Π΄Π°Ρ‡.

32. ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹


Π’ΠΎ всСх ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… отсутствовала ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ исслСдуСм эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ нашим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ содСрТимому ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

Доступ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС


Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ содСрТат ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ слова ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΎΡ‚ 0 Π΄ΠΎ 9. ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ…:

#!/bin/bash

# posit-param: сцСнарий для просмотра ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

echo "

\$0 = $0

\$1 = $1

\$2 = $2

\$3 = $3

\$4 = $4

\$5 = $5

\$6 = $6

\$7 = $7

\$8 = $8

\$9 = $9

"

Π­Ρ‚ΠΎΡ‚ ΠΎΡ‡Π΅Π½ΡŒ простой сцСнарий Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΎΡ‚ $0 Π΄ΠΎ $9. Запустим Π΅Π³ΠΎ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

[ [email protected] ~]$ posit-param

$0 = /home/me/bin/posit-param

$1 =

$2 =

$3 =

$4 =

$5 =

$6 =

$7 =

$8 =

$9 =

Π”Π°ΠΆΠ΅ Π² отсутствиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² пСрСмСнная $0 всСгда содСрТит ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки β€” ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ выполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ нСсколько Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

[ [email protected] ~]$ posit-param a b c d

$0 = /home/me/bin/posit-param

$1 = a

$2 = b

$3 = c

$4 = d

$5 =

$6 =

$7 =

$8 =

$9 =

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

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΊ дСвяти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ число большС дСвяти, слСдуСт Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ${10}, ${55}, ${211} ΠΈ Ρ‚.Π΄.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ числа Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²


Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $#, Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

#!/bin/bash

# posit-param: сцСнарий для просмотра ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

echo "

Number of arguments: $#

\$0 = $0

\$1 = $1

\$2 = $2

\$3 = $3

\$4 = $4

\$5 = $5

\$6 = $6

\$7 = $7

\$8 = $8

\$9 = $9

"

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

[ [email protected] ~]$ posit-param a b c d

Number of arguments: 4

$0 = /home/me/bin/posit-param

$1 = a

$2 = b

$3 = c

$4 = d

$5 =

$6 =

$7 =

$8 =

$9 =

shift β€” доступ ΠΊ мноТСству Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²


Но ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ пСрСдаСтся большоС число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

[ [email protected] ~]$ posit-param *

Number of arguments: 82

$0 = /home/me/bin/posit-param

$1 = addresses.ldif

$2 = bin

$3 = bookmarks.html

$4 = debian-500-i386-netinst.iso

$5 = debian-500-i386-netinst.jigdo

$6 = debian-500-i386-netinst.template

$7 = debian-cd_info.tar.gz

$8 = Desktop

$9 = dirlist-bin.txt

Π’ систСмС, Π³Π΄Π΅ выполнялся этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подстановки Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ» символ * Π² 82 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Как ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ количСство? Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° прСдусматриваСт Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈ для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаСв, ΠΏΡ€Π°Π²Π΄Π°, слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ изящСством ΠΎΠ½ΠΎ Π½Π΅ отличаСтся. Команда shift выполняСт «сдвиг» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ списка. ЀактичСски, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ shift, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ СдинствСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ (ΠΏΠΎΠΌΠΈΠΌΠΎ $0, которая Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ измСняСтся).

#!/bin/bash

# posit-param2: сцСнарий Π²Ρ‹Π²ΠΎΠ΄Π° всСх Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

count=1

while [[ $# -gt 0 ]]; do

echo "Argument $count = $1"

count=$((count + 1))

shift

done

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° shift, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $2 пСрСмСщаСтся Π² $1, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $3 пСрСмСщаСтся Π² $2 ΠΈ Ρ‚.Π΄. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $# ΠΏΡ€ΠΈ этом ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 1.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ posit-param2 ΠΌΡ‹ создали Ρ†ΠΈΠΊΠ», ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ число ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰ΠΈΠΉΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΎ Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ Π΄ΠΎ нуля. Π¦ΠΈΠΊΠ» Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счСтчик ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² count ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, выполняСт shift, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² $1 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

[ [email protected] ~]$ posit-param2 a b c d

Argument 1 = a

Argument 2 = b

Argument 3 = c

Argument 4 = d

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ прилоТСния


Π”Π°ΠΆΠ΅ Π±Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ shift ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. НапримСр, Π½ΠΈΠΆΠ΅ приводится простая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π΅:

#!/bin/bash

# file_info: простая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π΅

PROGNAME=$(basename $0)

if [[ -e $1 ]]; then

echo -e "\nFile Type:"

file $1

echo -e "\nFile Status:"

stat $1

else

echo "$PROGNAME: usage: $PROGNAME file" >&2

exit 1

fi

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΈΠΏ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ file) ΠΈ Π΅Π³ΠΎ состояниС (ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ stat). Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся пСрСмСнная PROGNAME. Π•ΠΉ присваиваСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ basename $0. Команда basename удаляСт Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ· ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, оставляя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ имя. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ basename ΡƒΠ΄Π°Π»ΠΈΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° $0, хранящСго ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для конструирования сообщСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ сцСнарий, ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ сообщСний Π½ΠΎΠ²ΠΎΠ΅ имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ автоматичСски.

ИспользованиС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² функциях


ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сцСнарии, Π½ΠΎ ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Для дСмонстрации ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ сцСнарий file_info Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

file_info () {

# file_info: функция для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π΅

if [[ -e $1 ]]; then

echo -e "\nFile Type:"

file $1

echo -e "\nFile Status:"

stat $1

else

echo "$FUNCNAME: usage: $FUNCNAME file" >&2

return 1

fi

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли сцСнарий, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ file_info, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π΅Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π° Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.