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

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

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π±ΠΎΠ»Π΅Π΅ слоТныС сцСнарии ΠΈΠ· /etc/rc.d/init.d. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π΅. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ, слСдуя рСкомСндациям, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅. Π—Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ sysvinitfiles Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /usr/share/doc/initscripts-?.??, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ "initscripts".


Π“Π»Π°Π²Π° 14. ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ -- это подстановка Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹[ 43 ] ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ сСрии ΠΊΠΎΠΌΠ°Π½Π΄; Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ, эта опСрация позволяСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ подстановки ΠΊΠΎΠΌΠ°Π½Π΄ -- использованиС ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ (`...`). ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ этих ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой тСкст ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

script_name=`basename $0`

echo "Имя этого Ρ„Π°ΠΉΠ»Π°-сцСнария: $script_name."


Π’Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ: ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, для установки значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π΄Π°ΠΆΠ΅ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ†ΠΈΠΊΠ»Π° for.

rm `cat filename` # здСсь "filename" содСрТит список удаляСмых Ρ„Π°ΠΉΠ»ΠΎΠ².

#

# S. C. ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ошибка "arg list too long".

# Π’Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅: xargs rm -- < filename

# ( -- ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для случая, ΠΊΠΎΠ³Π΄Π° "filename" начинаСтся с символа "-" )


textfile_listing=`ls *.txt`

# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ содСрТит ΠΈΠΌΠ΅Π½Π° всСх Ρ„Π°ΠΉΠ»ΠΎΠ² *.txt Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

echo $textfile_listing


textfile_listing2=$(ls *.txt) # ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

echo $textfile_listing2

# Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ ΠΆΠ΅ самым.


# ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° записи списка Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ состоит Π² Ρ‚ΠΎΠΌ,

# Ρ‡Ρ‚ΠΎ символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π».

#

# Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ -- Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ список Ρ„Π°ΠΉΠ»ΠΎΠ² Π² массив.

# shopt -s nullglob # ΠŸΡ€ΠΈ нСсоотвСтствии, имя Ρ„Π°ΠΉΠ»Π° игнорируСтся.

# textfile_listing=( *.txt )

#

# Бпасибо S.C.


ΠŸΠΎΠ΄ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π·Π±ΠΈΡ‚ΠΎΠΉ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ слова.

COMMAND `echo a b` # 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: a ΠΈ b


COMMAND "`echo a b`" # 1 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚: "a b"


COMMAND `echo` # Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²


COMMAND "`echo`" # ΠΎΠ΄ΠΈΠ½ пустой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚


# Бпасибо S.C.


Π”Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° Π½Π΅ происходит разбиСния Π½Π° слова, опСрация подстановки ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

# cd "`pwd`" # Π”ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ всСгда.

# Однако...


mkdir 'dir with trailing newline

'


cd 'dir with trailing newline

'


cd "`pwd`" # Ошибка:

# bash: cd: /tmp/dir with trailing newline: No such file or directory


cd "$PWD" # ВыполняСтся Π±Π΅Π· ошибки.


old_tty_setting=$(stty -g) # Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ настройки Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

echo "НаТмитС ΠΊΠ»Π°Π²ΠΈΡˆΡƒ "

stty -icanon -echo # Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ "каноничСский" Ρ€Π΅ΠΆΠΈΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

# Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ эхо-Π²Ρ‹Π²ΠΎΠ΄.

key=$(dd bs=1 count=1 2> /dev/null) # ΠŸΠΎΠΉΠΌΠ°Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ.

stty "$old_tty_setting" # Π’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ настройки Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

echo "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… клавиш = ${#key}." # ${#variable} = количСство символов Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $variable

#

# НаТмитС Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ, ΠΊΡ€ΠΎΠΌΠ΅ RETURN, Π½Π° экранС появится "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… клавиш = 1."

# НаТмитС RETURN, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅: "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… клавиш = 0."

# Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π±ΡƒΠ΄Π΅Ρ‚ "съСдСн" ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ подстановки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.


Бпасибо S.C.


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

dir_listing=`ls -l`

echo $dir_listing # Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ


# Π’Ρ‹ Π½Π°Π²Π΅Ρ€Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ список ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².


# Однако, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅:

# total 3 -rw-rw-r-- 1 bozo bozo 30 May 13 17:15 1.txt -rw-rw-r-- 1 bozo

# bozo 51 May 15 20:57 t2.sh -rwxr-xr-x 1 bozo bozo 217 Mar 5 21:13 wi.sh


# Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ.


echo "$dir_listing" # Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…

# -rw-rw-r-- 1 bozo 30 May 13 17:15 1.txt

# -rw-rw-r-- 1 bozo 51 May 15 20:57 t2.sh

# -rwxr-xr-x 1 bozo 217 Mar 5 21:13 wi.sh


ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ позволяСт Π΄Π°ΠΆΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ содСрТимоС Ρ†Π΅Π»Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСнаправлСния ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cat.

variable1=`<file1` # Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ "variable1" содСрТимоС Ρ„Π°ΠΉΠ»Π° "file1".

variable2=`cat file2` # Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ "variable2" содСрТимоС Ρ„Π°ΠΉΠ»Π° "file2".


# Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 1:

# Π£Π΄Π°Π»ΡΡŽΡ‚ΡΡ символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

#

# Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 2:

# Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы.


# Π’Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ· систСмного Ρ„Π°ΠΉΠ»Π° /etc/rc.d/rc.sysinit

#+ (Red Hat Linux)


if [ -f /fsckoptions ]; then

fsckoptions=`cat /fsckoptions`

...

fi

#

#

if [ -e "/proc/ide/${disk[$device]}/media" ] ; then

hdmedia=`cat /proc/ide/${disk[$device]}/media`

...

fi

#

#

if [ ! -n "`uname -r | grep -- "-"`" ]; then

ktag="`cat /proc/version`"

...

fi

#

#

if [ $usb = "1" ]; then

sleep 5

mouseoutput=`cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=02"`

kbdoutput=`cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=01"`

...

fi


НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для хранСния содСрТимого тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² большого объСма, Π±Π΅Π· вСских Π½Π° Ρ‚ΠΎ оснований. НС записывайтС Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ содСрТимоС Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄Π°ΠΆΠ΅ ΡˆΡƒΡ‚ΠΊΠΈ Ρ€Π°Π΄ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14-1. Глупая Π²Ρ‹Ρ…ΠΎΠ΄ΠΊΠ°

#!/bin/bash

# stupid-script-tricks.sh: Π›ΡŽΠ΄ΠΈ! Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π±Π»Π°Π³ΠΎΡ€Π°Π·ΡƒΠΌΠ½Ρ‹!

# Из "Π“Π»ΡƒΠΏΡ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΊΠΈ", Ρ‚ΠΎΠΌ I.


dangerous_variable=`cat /boot/vmlinuz` # Π‘ΠΆΠ°Ρ‚ΠΎΠ΅ ядро Linux.


echo "Π΄Π»ΠΈΠ½Π° строки \$dangerous_variable = ${#dangerous_variable}"

# Π΄Π»ΠΈΠ½Π° строки $dangerous_variable = 794151

# ('wc -c /boot/vmlinuz' даст Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.)


# echo "$dangerous_variable"

# Π”Π°ΠΆΠ΅ Π½Π΅ ΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π°ΡΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚ΡŒ эту строку! Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ зависанию сцСнария.


# Автор этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Π·Π½Π°Π΅Ρ‚, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

#+ запись содСрТимого Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.


exit 0

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибки пСрСполнСния Π±ΡƒΡ„Π΅Ρ€Π°. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ прСвосходство защищСнности ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Bash, ΠΎΡ‚ ошибок программиста, Π½Π°Π΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ языками программирования.

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄, позволяСт Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния Ρ†ΠΈΠΊΠ»Π°. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ здСсь являСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° echo, Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14-2. Π—Π°ΠΏΠΈΡΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния Ρ†ΠΈΠΊΠ»Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

#!/bin/bash

# csubloop.sh: Π—Π°ΠΏΠΈΡΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния Ρ†ΠΈΠΊΠ»Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ


variable1=`for i in 1 2 3 4 5

do

echo -n "$i" # Π—Π΄Π΅ΡΡŒ 'echo' -- это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚

done`


echo "variable1 = $variable1" # variable1 = 12345


i=0

variable2=`while [ "$i" -lt 10 ]

do

echo -n "$i" # ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° 'echo' просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°.

let "i += 1" # Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° 1.

done`


echo "variable2 = $variable2" # variable2 = 0123456789


exit 0

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ позволяСт сущСствСнно Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ располагаСт Bash. Π‘ΡƒΡ‚ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ»ΠΈ сцСнарий, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° stdout (ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ Π² UNIX) ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

#include <stdio.h>


/* ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C "Hello, world." */


int main()

{

printf( "Hello, world." );

return (0);

}

bash$ gcc -o hello hello.c


#!/bin/bash

# hello.sh


greeting=`./hello`

echo $greeting

bash$ sh hello.sh

Hello, world.


ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ для подстановки ΠΊΠΎΠΌΠ°Π½Π΄, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ записи: $(COMMAND).

output=$(sed -n /"$1"/p $file) # К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈΠ· "grp.sh".


# Π—Π°ΠΏΠΈΡΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ содСрТимого тСкстового Ρ„Π°ΠΉΠ»Π°.

File_contents1=$(cat $file1)

File_contents2=$(<$file2) # Bash допускаСт ΠΈ Ρ‚Π°ΠΊΡƒΡŽ запись.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ подстановки ΠΊΠΎΠΌΠ°Π½Π΄ Π² сцСнариях:

1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-7

2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-26

3. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9-26

4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-2

5. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-15

6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-12

7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-39

8. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-13

9. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-10

10. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-24

11. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 16-7

12. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-19

13. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 27-1

14. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-32

15. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-33

16. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-34


Π“Π»Π°Π²Π° 15. АрифмСтичСскиС подстановки

АрифмСтичСскиС подстановки -- это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для выполнСния арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сцСнариях. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки Π² числовоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок ΠΈΠ»ΠΈ прСдлоТСния let.

Π’Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ

АрифмСтичСскиС подстановки Π² ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… (часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ совмСстно с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ expr)

z=`expr $z + 3` # Команда 'expr' вычисляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния.


АрифмСтичСскиС подстановки Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках, ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ let

Π’ арифмСтичСских подстановках, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки $((...)) ΠΈΠ»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ конструкциСй, с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ прСдлоТСния let.

z=$(($z+3))

# $((EXPRESSION)) -- это подстановка арифмСтичСского выраТСния. # НС ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ с

#+ подстановкой ΠΊΠΎΠΌΠ°Π½Π΄.


let z=z+3

let "z += 3" # ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²ΡΡ‚Π°Π²Π»ΡΡŒΠ± ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

# ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 'let' вычисляСт арифмСтичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅,

#+ это Π½Π΅ подстановка арифмСтичСского выраТСния.