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

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

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

popd

echo "Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `pwd`."


exit 0

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

let

Команда let ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ expr.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-8. Команда let, арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

#!/bin/bash


echo


let a=11 # Π’ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ 'a=11'

let a=a+5 # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ "a = a + 5"

# (Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ)

echo "11 + 5 = $a"


let "a <<= 3" # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ let "a = a << 3"

echo "\"\$a\" (=16) послС сдвига Π²Π»Π΅Π²ΠΎ Π½Π° 3 разряда = $a"


let "a /= 4" # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ let "a = a / 4"

echo "128 / 4 = $a"


let "a -= 5" # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ let "a = a - 5"

echo "32 - 5 = $a"


let "a = a * 10" # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ let "a = a * 10"

echo "27 * 10 = $a"


let "a %= 8" # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ let "a = a % 8"

echo "270 mod 8 = $a (270 / 8 = 33, остаток = $a)"


echo


exit 0

eval

eval arg1 [arg2] ... [argN]

ВранслируСт список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈΠ· списка, Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-9. ДСмонстрация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ eval

#!/bin/bash


y=`eval ls -l` # Подобно y=`ls -l`

echo $y # Π½ΠΎ символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π½Π΅ выводятся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ….

echo

echo "$y" # Если имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… -- символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ.


echo; echo


y=`eval df` # Аналогично y=`df`

echo $y # Π½ΠΎ Π±Π΅Π· символов ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.


# Когда производится ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° символов LF (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки), Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·

#+ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ awk, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅.


exit 0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-10. ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ сСанса

#!/bin/bash


y=`eval ps ax | sed -n '/ppp/p' | awk '{ print $1 }'`

# Π’Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ PID процСсса 'ppp'.


kill -9 $y # "ΠŸΡ€ΠΈΡ…Π»ΠΎΠΏΠ½ΡƒΡ‚ΡŒ" Π΅Π³ΠΎ


# ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ строкой

# kill -9 `ps ax | awk '/ppp/ { print $1 }'


chmod 666 /dev/ttyS3

# Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ, ΠΏΠΎ сигналу SIGKILL, ppp измСняСт ΠΏΡ€Π°Π²Π° доступа

# ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ. Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ… Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС.


rm /var/lock/LCK..ttyS3 # Π£Π΄Π°Π»ΠΈΡ‚ΡŒ lock-Ρ„Π°ΠΉΠ» ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°.


exit 0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-11. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ "rot13"

#!/bin/bash

# РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ "rot13" с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 'eval'.

# Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ со сцСнариСм "rot13.sh".


setvar_rot_13() # ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ "rot13"

{

local varname=$1 varvalue=$2

eval $varname='$(echo "$varvalue" | tr a-z n-za-m)'

}


setvar_rot_13 var "foobar" # ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ слово "foobar" Ρ‡Π΅Ρ€Π΅Π· rot13.

echo $var # sbbone


echo $var | tr a-z n-za-m # foobar

# Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π½ΠΈΠ΅.


# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСдоставил Stephane Chazelas.


exit 0

Rory Winston прСдставил ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† практичСского использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ eval.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-12. Π—Π°ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² исходном тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Perl, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ eval

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ "test.pl", Π½Π° языкС Perl:

...

my $WEBROOT = <WEBROOT_PATH>;

...


Π­Ρ‚Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° подстановки значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ вмСсто Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ:

$export WEBROOT_PATH=/usr/local/webroot

$sed 's/<WEBROOT_PATH>/$WEBROOT_PATH/' < test.pl > out


даст Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

my $WEBROOT = $WEBROOT_PATH;


Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅:

$export WEBROOT_PATH=/usr/local/webroot

$eval sed 's/<WEBROOT_PATH>/$WEBROOT_PATH/' < test.pl > out

# ====


Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄Π°Π» ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ -- имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹,

Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡƒΡ‡Π½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

my $WEBROOT = /usr/local/webroot

Команда eval ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСбСзопасна. Если сущСствуСт приСмлСмая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, Ρ‚ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ использования eval. Π’Π°ΠΊ, eval $COMMANDS исполняСт ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записан Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ COMMANDS, которая, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ вСсьма нСприятныС ΡΡŽΡ€ΠΏΡ€ΠΈΠ·Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ rm -rf *. ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ eval, для исполнСния ΠΊΠΎΠ΄Π° нСизвСстного происхоТдСния, ΠΊΡ€Π°ΠΉΠ½Π΅ опасно.

set

Команда set измСняСт значСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… сцСнария. Она ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ†ΠΈΠΉ (ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ„Π»Π°Π³ΠΎΠ²), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ скрипта. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ -- сброс/установка ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²), значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ восприняты ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (set `command`).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-13. Установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ set

#!/bin/bash


# script "set-test"


# Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ сцСнарий с трСмя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки,

# Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: "./set-test one two three".


echo

echo "АргумСнты ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ set \`uname -a\` :"

echo "АргумСнт #1 = $1"

echo "АргумСнт #2 = $2"

echo "АргумСнт #3 = $3"


set `uname -a` # ИзмСнСниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

# значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… бСрутся ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ `uname -a`


echo $_


echo "АргумСнты послС Π²Ρ‹Π·ΠΎΠ²Π° set \`uname -a\` :"

# $1, $2, $3 ΠΈ Ρ‚.Π΄. Π±ΡƒΠ΄ΡƒΡ‚ пСрСустановлСны Π² соотвСтствии с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ

#+ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `uname -a`

echo "ПолС #1 'uname -a' = $1"

echo "ПолС #2 'uname -a' = $2"

echo "ПолС #3 'uname -a' = $3"

echo ---

echo $_ # ---

echo


exit 0

Π’Ρ‹Π·ΠΎΠ² set Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния.

bash$ set

AUTHORCOPY=/home/bozo/posts

BASH=/bin/bash

BASH_VERSION=$'2.05.8(1)-release'

...

XAUTHORITY=/home/bozo/.Xauthority

_=/etc/bashrc

variable22=abc

variable23=xzy


Если ΠΊΠΎΠΌΠ°Π½Π΄Π° set ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ "--", послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт пСрСмСнная, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ пСрСносится Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹). Если имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ отсутствуСт, Ρ‚ΠΎ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сбросу ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-14. ИзмСнСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²)

#!/bin/bash


variable="one two three four five"


set -- $variable

# ЗначСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² бСрутся ΠΈΠ· "$variable".


first_param=$1

second_param=$2

shift; shift # сдвиг Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

remaining_params="$*"


echo

echo "ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = $first_param" # one

echo "Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = $second_param" # two

echo "ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ = $remaining_params" # three four five


echo; echo


# Π‘Π½ΠΎΠ²Π°.

set -- $variable

first_param=$1

second_param=$2

echo "ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = $first_param" # one

echo "Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = $second_param" # two


# ======================================================


set --

# ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ, Ссли Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.


first_param=$1

second_param=$2

echo "ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = $first_param" # (пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

echo "Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = $second_param" # (пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)


exit 0

Π‘ΠΌ. Ρ‚Π°ΠΊ ΠΆΠ΅ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-2 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-40.

unset

Команда unset удаляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, фактичСски -- устанавливаСт Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² null. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: эта ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹).

bash$ unset PATH


bash$ echo $PATH


bash$


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-15. "Бброс" ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

#!/bin/bash

# unset.sh: Бброс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.


variable=hello # Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ.

echo "variable = $variable"


unset variable # Бброс.

# Π’ΠΎΡ‚ ΠΆΠ΅ эффСкт Π΄Π°Π΅Ρ‚ variable=

echo "(unset) variable = $variable" # $variable = null.


exit 0

export

Команда export экспортируСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, дСлая Π΅Π΅ доступной Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ процСссам. К соТалСнию, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ процСссу. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ export ΠΌΠΎΠΆΠ½ΠΎ привСсти сцСнарии ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π² процСссС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, дСлая ΠΈΡ… доступными для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… процСссов.