Сценарии, использующие переменные окружения (такие как MAILER или PAGER), таят в себе скрытую опасность: некоторые их настройки могут ссылаться на несуществующие программы. Для тех, кто не сталкивался прежде с этими переменными окружения, отметим, что MAILER должна хранить путь к программе электронной почты (например, /usr/bin/mailx), а PAGER должна ссылаться на программу постраничного просмотра длинных документов. Например, если вы решите увеличить гибкость сценария и вместо системной программы постраничного просмотра по умолчанию (обычно more или less) использовать для отображения вывода сценария переменную PAGER, необходимо убедиться, что эта переменная содержит действительный путь к существующей программе.
Этот первый сценарий показывает, как проверить доступность указанной программы в списке путей PATH. Он также послужит отличной демонстрацией нескольких приемов программирования на языке командной оболочки, включая определение функций и переменных. Листинг 1.1 показывает, как проверить допустимость путей к файлам.
Код
Листинг 1.1. Сценарий inpath с определениями функций
#!/bin/bash
# inpath — Проверяет допустимость пути к указанной программе
# или ее доступность в каталогах из списка PATH
in_path()
{
··# Получает команду и путь, пытается отыскать команду. Возвращает 0, если
··#·· команда найдена и является выполняемым файлом; 1 — если нет. Обратите
··#·· внимание, что эта функция временно изменяет переменную окружения
··#·· IFS (Internal Field Separator — внутренний разделитель полей), но
··#·· восстанавливает ее перед завершением.
··cmd=$1········ourpath=$2···· result=1
··oldIFS=$IFS·· IFS=":"
··for directory in "$ourpath"
··do
····if [-x $directory/$cmd]; then
······result=0······ # Если мы здесь, значит, команда найдена.
····fi
··done
··IFS=$oldIFS
··return $result
}
checkForCmdInPath()
{
··var=$1
··if ["$var"!= ""]; then
········return 1
······fi
······return 2
····fi
··fi
}
В главе 0 мы рекомендовали создать в своем домашнем каталоге новую папку
Если попробовать вывести список файлов в каталоге с помощью команды ls, некоторые специальные файлы, такие как
Напомним еще раз: все наши сценарии написаны в предположении, что они будут выполняться командной оболочкой bash. Обратите внимание: этот сценарий явно указывает в первой строке (называется