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

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4-2. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ присваиваниС

#!/bin/bash

# Π―Π²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅


echo


# Когда ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ употрСбляСтся символ '$'?

# Π’ опСрациях присваивания.


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

a=879

echo "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"a\" -- $a."


# ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова 'let'

let a=16+5

echo "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"a\" Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ стало Ρ€Π°Π²Π½Ρ‹ΠΌ: $a."


echo


# Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π° 'for' (своСго Ρ€ΠΎΠ΄Π° нСявноС присваиваниС)

echo -n "ЗначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"a\" Π² Ρ†ΠΈΠΊΠ»Π΅: "

for a in 7 8 9 11

do

echo -n "$a "

done


echo

echo


# ΠŸΡ€ΠΈ использовании инструкции 'read' (Ρ‚ΠΎΠΆΠ΅ ΠΎΠ΄Π½Π° ΠΈΠ· разновидностСй присваивания)

echo -n "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"a\" "

read a

echo "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ \"a\" Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ стало Ρ€Π°Π²Π½Ρ‹ΠΌ: $a."


echo


exit 0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4-3. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ простоС ΠΈ замаскированноС

#!/bin/bash


a=23 # ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ случай

echo $a

b=$a

echo $b


# Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (подстановка ΠΊΠΎΠΌΠ°Π½Π΄).


a=`echo Hello!` # Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ 'a' ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 'echo'

echo $a

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ (!) Π² подстанавливаСмой ΠΊΠΎΠΌΠ°Π½Π΄Π΅

#+ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π½Π°Π±ΠΎΡ€Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС,

#+ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ "истории ΠΊΠΎΠΌΠ°Π½Π΄" BASH

# Однако, Π² сцСнариях, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ истории ΠΊΠΎΠΌΠ°Π½Π΄ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½.


a=`ls -l` # Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ 'a' записываСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 'ls -l'

echo $a # ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ лишниС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ пустыС строки.

echo

echo "$a" # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, всС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ пустыС строки ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ.

# (Π‘ΠΌ. Π³Π»Π°Π²Ρƒ "ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.")


exit 0

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с использованиСм $(...) (Π±ΠΎΠ»Π΅Π΅ соврСмСнный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ)

# Взято ΠΈΠ· /etc/rc.d/rc.local

R=$(cat /etc/redhat-release)

arch=$(uname -m)


4.3. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Bash Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏΠ°

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, Bash Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ раздСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ "Ρ‚ΠΈΠΏΠ°ΠΌ". По сути, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Bash ΡΠ²Π»ΡΡŽΡ‚ΡΡ строковыми ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π½ΠΎ, Π² зависимости ΠΎΡ‚ контСкста, Bash допускаСт Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΡƒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ здСсь слуТит содСрТимоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4-4. Π¦Π΅Π»ΠΎΠ΅ число ΠΈΠ»ΠΈ строка?

#!/bin/bash

# int-or-string.sh: Π¦Π΅Π»ΠΎΠ΅ число ΠΈΠ»ΠΈ строка?


a=2334 # Π¦Π΅Π»ΠΎΠ΅ число.

let "a += 1"

echo "a = $a " # a = 2335

echo # ВсС Π΅Ρ‰Π΅ Ρ†Π΅Π»ΠΎΠ΅ число.


b=${a/23/BB} # Π·Π°ΠΌΠ΅Π½Π° "23" Π½Π° "BB".

# ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ трансформация числа Π² строку.

echo "b = $b" # b = BB35

declare -i b # Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° здСсь Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

echo "b = $b" # b = BB35


let "b += 1" # BB35 + 1 =

echo "b = $b" # b = 1

echo


c=BB34

echo "c = $c" # c = BB34

d=${c/BB/23} # Π·Π°ΠΌΠ΅Π½Π° "BB" Π½Π° "23".

# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ $d становится цСлочислСнной.

echo "d = $d" # d = 2334

let "d += 1" # 2334 + 1 =

echo "d = $d" # d = 2335

echo


# А Ρ‡Ρ‚ΠΎ происходит с "пустыми" ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ?

e=""

echo "e = $e" # e =

let "e += 1" # АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ использованиС "пустых" ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…?

echo "e = $e" # e = 1

echo # "ΠŸΡƒΡΡ‚Π°Ρ" пСрСмСнная становится цСлочислСнной.


# А Ρ‡Ρ‚ΠΎ происходит с Π½Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ?

echo "f = $f" # f =

let "f += 1" # АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ допустимы?

echo "f = $f" # f = 1

echo # НСобъявлСнная пСрСмСнная трансформируСтся Π² Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ.


# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Bash Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏΠΎΠ².


exit 0

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² -- это ΠΈ благословСниС ΠΈ проклятиС. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны -- отсутствиС Ρ‚ΠΈΠΏΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ‚ сцСнарии Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒΡΡ -- достаточно ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π΅Ρ€Π΅Π²ΠΊΡƒ!) ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ -- являСтся источником ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок ΠΈ поощряСт ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΡƒ ΠΊ "Π½Π΅Ρ€ΡΡˆΠ»ΠΈΠ²ΠΎΠΌΡƒ" ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

БрСмя отслСТивания Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΏΠ»Π΅Ρ‡Π°Ρ… программиста. Bash Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π·Π° вас!


4.4. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Ρ‚Π΅Π»ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (см Ρ‚Π°ΠΊ ΠΆΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² функциях)

ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния

ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΈ порядок взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

Π’ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΌ контСкстС, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ "ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅" (срСду исполнСния), Ρ‚.Π΅. Π½Π°Π±ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ этом смыслС командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ процСссу.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° запускаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, для Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ окруТСния. ИзмСнСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния заставляСт ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ свои ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈ всС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ процСссы (ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, исполняСмыС Сю) Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ это ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ, выдСляСмоС ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ слишком большого количСства ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ слишком большоС пространство, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ возникновСнию ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

bash$ eval "`seq 10000 | sed -e 's/.*/export var&=ZZZZZZZZZZZZZZ/'`"


bash$ du

bash: /usr/bin/du: Argument list too long


(Бпасибо S. C. Π·Π° Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ пояснСния.)

Если сцСнарий измСняСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ "ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ", Ρ‚.Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ, Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ. Π­Ρ‚Π° функция Π²ΠΎΠ·Π»ΠΎΠΆΠ΅Π½Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ export.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ процСссу, Ρ‚.Π΅. ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΈ процСссам запускаСмым ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ сцСнария. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ, запускаСмый ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ "Π½Π° Π²Π΅Ρ€Ρ…" ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅. Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ процСссу.

---

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

Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ скрипту ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки -- $0, $1, $2, $3..., Π³Π΄Π΅ $0 -- это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° сцСнария, $1 -- это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, $2 -- Π²Ρ‚ΠΎΡ€ΠΎΠΉ, $3 -- Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅[ 13 ]. АргумСнты, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π° $9, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ${10}, ${11}, ${12}.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $* ΠΈ [email protected] содСрТат всС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки).

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

#!/bin/bash


# Команда Π²Ρ‹Π·ΠΎΠ²Π° сцСнария Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ 10 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

# ./scriptname 1 2 3 4 5 6 7 8 9 10

MINPARAMS=10


echo


echo "Имя Ρ„Π°ΠΉΠ»Π° сцСнария: \"$0\"."

# Для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ./

echo "Имя Ρ„Π°ΠΉΠ»Π° сцСнария: \"`basename $0`\"."

# Π”ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° (см. 'basename')


echo


if [ -n "$1" ] # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΠ°Ρ пСрСмСнная Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

then

echo "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ #1: $1" # Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ для экранирования символа #

fi


if [ -n "$2" ]

then

echo "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ #2: $2"

fi


if [ -n "$3" ]

then

echo "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ #3: $3"

fi


# ...


if [ -n "${10}" ] # ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π° $9 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки

then

echo "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ #10: ${10}"

fi


echo "-----------------------------------"

echo "ВсС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: "$*""


if [ $# -lt "$MINPARAMS" ]

then

echo

echo "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ $MINPARAMS !"

fi


echo


exit 0