Книга: Искусство программирования на языке сценариев командной оболочки

Пример 31-2. Передача вывода от команды echo команде read, по конвейеру

Пример 31-2. Передача вывода от команды echo команде read, по конвейеру

#!/bin/bash

# badread.sh:

# Попытка использования 'echo' и 'read'

#+ для записи значений в переменные.

a=aaa

b=bbb

c=ccc

echo "один два три" | read a b c

# Попытка записать значения в переменные a, b и c.

echo

echo "a = $a" # a = aaa

echo "b = $b" # b = bbb

echo "c = $c" # c = ccc

# Присваивания не произошло.

# ------------------------------

# Альтернативный вариант.

var=`echo "один два три"`

set -- $var

a=$1; b=$2; c=$3

echo "-------"

echo "a = $a" # a = один

echo "b = $b" # b = два

echo "c = $c" # c = три

# На этот раз все в порядке.

# ------------------------------

# Обратите внимание: в подоболочке 'read', для первого варианта, переменные присваиваются нормально.

# Но только в подоболочке.

a=aaa # Все сначала.

b=bbb

c=ccc

echo; echo

echo "один два три" | ( read a b c;

echo "Внутри подоболочки: "; echo "a = $a"; echo "b = $b"; echo "c = $c" )

# a = один

# b = два

# c = три

echo "-------"

echo "Снаружи: "

echo "a = $a" # a = aaa

echo "b = $b" # b = bbb

echo "c = $c" # c = ccc

echo

exit 0

Огромный риск, для безопасности системы, представляет использование в скриптах команд, с установленным битом "suid"[ 61 ].

Использование сценариев в качестве CGI-приложений может приводить к серьезным проблемам из-за отсутствия контроля типов переменных. Более того, они легко могут быть заменены взломщиком на его собственные сценарии.

Bash не совсем корректно обрабатывает строки, содержащие двойной слэш (//).

Сценарии на языке Bash, созданные для Linux или BSD систем, могут потребовать доработки, перед тем как они смогут быть запущены в коммерческой версии UNIX. Такие сценарии, как правило, используют GNU-версии команд и утилит, которые имеют лучшую функциональность, нежели их аналоги в UNIX. Это особенно справедливо для таких утилит обработки текста, как tr.

Danger is near thee --

Beware, beware, beware, beware.

Many brave hearts are asleep in the deep.

So beware --

Beware.

A.J. Lamb and H.W. Petrie

Оглавление книги


Генерация: 1.549. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз