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

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

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

Но ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ? ΠŸΡ€ΠΎΡΡ‚ΠΎ, β€” достаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅. Когда командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° встрСчаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠ½Π° автоматичСски создаСт Π΅Π΅. Π­Ρ‚ΠΈΠΌ ΠΎΠ½Π° отличаСтся ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… языков программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π΄ΠΎ Π΅Π΅ использования. Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° слишком Π»ΠΈΠ±Π΅Ρ€Π°Π»ΡŒΠ½Π° Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.

НапримСр, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сцСнарий, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

[ [email protected] ~]$ foo="yes"

[ [email protected] ~]$ echo $foo

yes

[ [email protected] ~]$ echo $fool

[ [email protected] ~]$

ΠœΡ‹ сначала присвоили Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ yes ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ foo ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π²Π΅Π»ΠΈ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ echo. Π”Π°Π»Π΅Π΅, ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ вновь вывСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ допустили ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΡƒ, ΡƒΠΊΠ°Π·Π°Π² имя fool, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡƒΡΡ‚ΡƒΡŽ строку. Π’Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡƒΡ‡Π½ΠΎ создала ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ fool, встрСтив Π΅Π΅, ΠΈ присвоила Π΅ΠΉ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Из этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° слСдуСт, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° правописаниСм! Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Из ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ знакомства с особСнностями Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Β­ΠΊΠΎΠΌΠ°Π½Π΄Π°

[ [email protected] ~]$ echo $foo

подвСргаСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ Π²ΠΈΠ΄

[ [email protected] ~]$ echo yes

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΊΠΎΠΌΠ°Π½Π΄Π°

[ [email protected] ~]$ echo $fool

прСвращаСтся Π²

[ [email protected] ~]$ echo

На мСсто пустой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ подставляСтся! Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… наличия Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НапримСр:

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

[ [email protected] ~]$ foo1=foo1.txt

[ [email protected] ~]$ cp $foo $fool

cp: послС 'foo.txt' ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ»

По ΠΊΠΎΠΌΠ°Π½Π΄Π΅ "cp --help" ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

ΠœΡ‹ присвоили значСния Π΄Π²ΡƒΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, foo ΠΈ foo1. А Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cp, Π½ΠΎ допустили ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΡƒ Π² ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ подстановки ΠΊΠΎΠΌΠ°Π½Π΄Π° cp ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, хотя Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²ΡƒΡ….

НиТС приводятся нСсколько ΠΏΡ€Π°Π²ΠΈΠ» имСнования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

β€’ ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… символов (Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€) ΠΈ символов подчСркивания.

β€’ ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²ΠΎΠΉ ΠΈΠ»ΠΈ символом подчСркивания.

β€’ ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π·Π½Π°ΠΊΠΎΠ² прСпинания Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ допускаСтся.

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

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ констант, Π² Π²ΠΈΠ΄Π΅ встроСнной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ declare с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -r (read-only β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния). Если ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ TITLE ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

declare -r TITLE="Page Title"

командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π΅ допустит ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ присваивания значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ TITLE. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π½ΠΎ ΠΎΠ½ имССтся ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² особСнно строгих сцСнариях.

НазваниС пСрСмСнная ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… прилоТСниях ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Однако пСрСмСнная title Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ константа. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ пСрСмСнная, ΠΈΠΌΠ΅Π΅Ρ‚ имя ΠΈ содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы Π½Π΅ измСняСтся. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰Π΅ΠΌ гСомСтричСскиС расчСты, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ константу PI со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 3.1415, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это число ΠΏΠΎ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ константы ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅; эти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² основном для удобства программиста. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ соглашСниС β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра для обозначСния констант ΠΈ Π±ΡƒΠΊΠ²Ρ‹ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра для истинных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ сцСнарий, привСдя Π΅Π³ΠΎ Π² соотвСтствиС с этим соглашСниСм:

#!/bin/bash

# ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° страницы с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ систСмС

TITLE="System Information Report For $HOSTNAME"

echo "<HTML>

<HEAD>

<TITLE>$TITLE</TITLE>

</HEAD>

<BODY>

<H1>$TITLE</H1>

</BODY>

</HTML>"

ΠŸΠΎΠΏΡƒΡ‚Π½ΠΎ ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² ΠΊΠΎΠ½Π΅Ρ† Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ HOSTNAME. Π­Ρ‚ΠΎ β€” сСтСвоС имя ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ константам


ΠœΡ‹ подошли ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° нашС Π·Π½Π°Π½ΠΈΠ΅ особСнностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подстановки Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΎΡΠΈΡ‚ΡŒ свои ΠΏΠ»ΠΎΠ΄Ρ‹. Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, присваиваниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ производится Ρ‚Π°ΠΊ:

пСрСмСнная=Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π³Π΄Π΅ пСрСмСнная β€” это имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” строка. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π΅ заботится ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, присваиваСмых ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ; ΠΎΠ½Π° всС значСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ строки. БущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠ³ присваиваСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, задСйствовав ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ declare с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -i, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, доступных Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° отсутствиС ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ присваивания ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π½Π°ΠΊΠΎΠΌ Β«Ρ€Π°Π²Π½ΠΎΒ» ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. А ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅? Из всСго Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² строку.

a=z # ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a строку "z".

b="a string" # Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ….

c="a string and $b" # ΠŸΡ€ΠΈ присваивании допускаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ подстановку,

# Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

d=$(ls -l foo.txt) # Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

e=$((5 * 7)) # ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° арифмСтичСского выраТСния.

f="\t\ta string\n" # Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ

# символы табуляции ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

Π’ ΠΎΠ΄Π½ΠΎΠΉ строкС ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ присваиваниС сразу нСскольким ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ:

a=5 b="a string"

ΠŸΡ€ΠΈ использовании подстановки ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки {}. Π­Ρ‚ΠΎ пригодится Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ становится Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ Π² ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΌ контСкстС. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ выполняСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» myfile Π² myfile1 с использованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

[ [email protected] ~]$ filename="myfile"

[ [email protected] ~]$ touch $filename

[ [email protected] ~]$ mv $filename $filename1

mv: послС 'myfile' ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ»

По ΠΊΠΎΠΌΠ°Π½Π΄Π΅ "mv --help" ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Π­Ρ‚Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π΅ ΡƒΠ²Π΅Π½Ρ‡Π°Π»Π°ΡΡŒ успСхом, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ mv ΠΊΠ°ΠΊ имя Π½ΠΎΠ²ΠΎΠΉ (ΠΈ пустой) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ подобная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

[ [email protected] ~]$ mv $filename ${filename}1

Π”ΠΎΠ±Π°Π²ΠΈΠ² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΌΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ послСдний символ 1 ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ этой Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя составлСния ΠΎΡ‚Ρ‡Π΅Ρ‚Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΡΠΎΡΡ‚Π°Π²ΠΈΠ²ΡˆΠ΅Π³ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚:

#!/bin/bash

# ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° страницы с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ систСмС

TITLE="System Information Report For $HOSTNAME"

CURRENT_TIME=$(date +"%x %r %Z")

TIME_STAMP="Generated $CURRENT_TIME, by $USER"

echo "<HTML>

<HEAD>

<TITLE>$TITLE</TITLE>

</HEAD>

<BODY>

<H1>$TITLE</H1>

<P>$TIME_STAMP</P>

</BODY>

</HTML>"

ВстроСнныС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹


ΠœΡ‹ рассмотрСли Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄Π° тСкста, ΠΈ ΠΎΠ±Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ echo. Однако сущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся встроСнным Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ (here document), ΠΈΠ»ΠΈ встроСнным сцСнариСм (here script). ВстроСнный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β€” это Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° пСрСнаправлСния Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, которая ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ тСкст, встроСнный Π² сцСнарий, Π½Π° стандартный Π²Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ДСйствуСт это ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ:

ΠΊΠΎΠΌΠ°Π½Π΄Π° << ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€

тСкст

ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π³Π΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° β€” это имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ тСкст Ρ‡Π΅Ρ€Π΅Π· стандартный Π²Π²ΠΎΠ΄, Π° ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€” это строка, ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‰Π°Ρ ΠΊΠΎΠ½Π΅Ρ† встроСнного тСкста. ИзмСним сцСнарий, задСйствовав Π² Π½Π΅ΠΌ встроСнный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚:

#!/bin/bash

# ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° страницы с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ систСмС

TITLE="System Information Report For $HOSTNAME"

CURRENT_TIME=$(date +"%x %r %Z")

TIME_STAMP="Generated $CURRENT_TIME, by $USER"

cat << _EOF_

<HTML>

<HEAD>

<TITLE>$TITLE</TITLE>

</HEAD>

<BODY>

<H1>$TITLE</H1>

<P>$TIME_STAMP</P>

</BODY>

</HTML>

_EOF_

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вмСсто ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo Π² сцСнарии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° cat ΠΈ встроСнный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. На Ρ€ΠΎΠ»ΡŒ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° строка _EOF_ (ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ end-of-file β€” ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°, распространСнноС соглашСниС), ΠΈ ΠΎΠ½Π° ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† встроСнного тСкста. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ строка-ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС, ΠΎΠ΄Π½Π°, ΠΈ Π·Π° Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

Но ΠΊΠ°ΠΊΠΈΠ΅ прСимущСства Π΄Π°Π»ΠΎ использованиС встроСнного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° здСсь? ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ…, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ встроСнных Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚Π΅Ρ€ΡΡŽΡ‚ своС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования встроСнного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

[ [email protected] ~]$ foo="some text"

[ [email protected] ~]$ cat << _EOF_

> $foo

> "$foo"

> '$foo'

> \$foo

> _EOF_

some text

"some text"