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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 16

Автор АндрСй РобачСвский

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ свСдСния ΠΎ языкС Bourne shell, достаточныС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² систСмных скриптах ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ скрипты. Π”Π°Π½Π½ΠΎΠ΅ описаниС Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° языкС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис скрипта

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, скрипт прСдставляСт собой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСкстовый Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ записаны инструкции, понятныС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, выраТСния shell ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ считываСт эти инструкции ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выполняСт ΠΈΡ….

БСзусловно, ΠΊΠ°ΠΊ ΠΈ Π² случаС любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ языка программирования, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² сущСствСнно ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ использованиС ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ написанной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ Bourne shell ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа '#':

# Π­Ρ‚ΠΎΡ‚ скрипт выполняСт поиск "мусора" (Π·Π°Π±Ρ‹Ρ‚Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

# Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ„Π°ΠΉΠ»ΠΎΠ² core ΠΈ Ρ‚.ΠΏ.) Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ всю строку, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ послС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

find /home -name core -print # Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ поиск Ρ„Π°ΠΉΠ»ΠΎΠ² core

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² систСмС ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ скрипты для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ², имя ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ помСщаСтся Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

#!/bin/sh

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ тСкст скрипта Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Bourne shell. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ запускС скрипта ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (для этого ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΎΠΌ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β€” x), Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π²Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° скрипта.

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

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΈΠ»ΠΈ скриптС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ являСтся строка, которая пСрСдаСтся присвоСниСм:

var=value

Π³Π΄Π΅ var β€” имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, a value β€” Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π½Π°ΠΊ. НапримСр, вывСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ name Π½Π° экран ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ echo $name

Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (name1) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ name:

$ name1=$name

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСдставляСт собой строку, shell прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ строк ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Бинтаксис присвоСния ΠΏΡ€ΠΈ этом ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

var=`command`

Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ var β€” имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, a command β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΠΌΠ°Π½Π΄Π° pwd(1) Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°:

$ pwd

/usr/home/andrei/test

МоТно ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ cdir Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сохранится Π² Π½Π΅ΠΉ:

$ cdir=`pwd`

$ echo $cdir

/usr/home/andrei/test

$ cd /usr/bin

$ pwd

/usr/bin

$ cd $cdir

$ pwd

/usr/home/andrei/test

ΠŸΡ€ΠΈ использовании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ var, ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ подставляСт вмСсто $var Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π‘ΠΎΠ»Π΅Π΅ слоТныС синтаксичСскиС конструкции получСния значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 1.7.


Π’Π°Π±Π»ΠΈΡ†Π° 1.7. Бпособы получСния значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

$var Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ var; Π½ΠΈΡ‡Π΅Π³ΠΎ, Ссли пСрСмСнная var Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ${var} Π’ΠΎ ΠΆΠ΅, Π½ΠΎ отдСляСт имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ var ΠΎΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… символов ${var:-string} Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ var, Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” string. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ var ΠΏΡ€ΠΈ этом Π½Π΅ измСняСтся ${var:=string} Π’ΠΎ ΠΆΠ΅, Π½ΠΎ Ссли пСрСмСнная var Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Π΅ΠΉ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строки string ${var:?string} Если пСрСмСнная var Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, выводится строка string ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Если строка string пуста, Ρ‚ΠΎ выводится сообщСниС var: parameter not set ${var:+string} Π‘Ρ‚Ρ€ΠΎΠΊΠ° string, Ссли пСрСмСнная var ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” Π½ΠΈΡ‡Π΅Π³ΠΎ

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ echo:

$ var=user1

$ var1=user2

$ echo $var1

user2

$ echo ${var}l

user11

$ echo ${var1:+"do you want to redefine var?"}

do you want to redefine var?

Для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² UNIX ряд ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈ зависит ΠΎΡ‚ Ρ‚Π΅Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ нСсколько Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

Имя ОписаниС Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΠžΠœΠ• ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ /usr/'logname'[13] PATH ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ /bin:/etc:/usr/bin:. MAIL Имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика /usr/spool/mail/'logname' TERM Имя Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ansi PS1 ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ shell # PS2 Π’Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ shell >

ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ вашСго сСанса устанавливаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ login(1) исходя ΠΈΠ· записСй Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ окруТСния ПолС Ρ„Π°ΠΉΠ»Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ HOME=домашний_ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ 6 LOGNAME=зарСгистрированноС_имя 1 PATH=/usr/bin: - SHELL=ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€_сСанса 7 MAIL=/var/mail/зарСгистрированноС_имя 1 TZ=врСмСнная_Π·ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ систСмой

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΠžΠœΠ• Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ cd, которая слуТит для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³:

$ pwd

/u/usr

$ cd some/new/directory

$ pwd

/u/usr/some/new/directorу

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ (ΠΊΠΎΠΌΠ°Π½Π΄Π° pwd(1) Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΏΠΎΠ»Π½ΠΎΠ΅ имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°) становится /u/usr/some/new/directory. Π’Ρ‹Π·ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cd Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° эквивалСнтСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ:

$ cd $HOME

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€Π½Π΅Ρ‚ вас Π² домашний ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ PATH слуТит для поиска ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ запускаСмых Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ссли ΠΈΡ… имя Π½Π΅ содСрТит ΠΏΡƒΡ‚ΠΈ. НапримСр, ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

$ run

ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ попытаСтся Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ» run Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… ΠΏΡƒΡ‚ΠΈ поиска. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ run с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ, пСрСмСнная PATH ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚:

$ ./run

Π’ послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π»ΠΎ Π·Π°Π΄Π°Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ имССтся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС shell Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС.

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ поиска Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ PATH Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ символом ':'. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ поиска Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ явно ('.'), shell Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ поиск Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Поиск запускаСмых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ‚Π°ΠΈΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, поэтому для ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ пСрСмСнная PATH ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ инициализируСтся Π±Π΅Π· '.'. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ создаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°Π½ΠΎΡΡΡ‰ΡƒΡŽ Π²Ρ€Π΅Π΄ систСмС (ΡƒΠ΄Π°Π»ΡΡŽΡ‰ΡƒΡŽ Ρ„Π°ΠΉΠ» ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ), ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΎΠ±Ρ‰Π΅Π³ΠΎ пользования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² /tmp, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π½Π° запись всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ систСмы, с ΠΈΠΌΠ΅Π½Π΅ΠΌ ls. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² UNIX сущСствуСт стандартная ΠΊΠΎΠΌΠ°Π½Π΄Π° ls(1) (ΠΎΠ½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находится Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /bin), выводящая Π½Π° экран список Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Допустим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎ администратор систСмы Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /tmp ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ вывСсти список Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ('.') располоТСн Π² ΠΏΡƒΡ‚ΠΈ поиска (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ PATH) Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /bin, Ρ‚ΠΎ выполнится ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, "подлоТСнная" Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ. Π”Π°ΠΆΠ΅ Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΡƒΠΊΠ°Π·Π°Π½ послСдним Π² ΠΏΡƒΡ‚ΠΈ поиска, всС Ρ€Π°Π²Π½ΠΎ сущСствуСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая располоТСна Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π½Π΅ попавшСм Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ PATH, Π½Π° самом Π΄Π΅Π»Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ троянского коня.