Linux и UNIX: программирование в shell. Руководство разработчика
Шрифт:
Для выполнения сценария применим команду chmod:
$ chmod u+x cleanup
Чтобы запустить сценарий на выполнение, введите его название:
$ cleanup
При отображении сообщения об ошибке, например:
$ cleanup
sh: cleanup: command not found
воспользуйтесь командой: $ ./cleanup
Если перед выполнением сценария нужно указать путь доступа к нему или же сценарий сообщает, что не может обнаружить команду, достаточно в значение переменной path из файла .profile добавить каталог bin. При вводе следующей информации сначала убедитесь, что вы находитесь
$ pwd
$ /home/dave/bin
Если последняя часть команды pwd включает название подкаталога /bin, его следует использовать при указании имени пути. Измените файл .profile и добавьте в файл .profile каталог $HOME/bin:
PATH=$PATH:$HOME/bin
В случае если подкаталог /bin отсутствует, создайте его; сначала удостоверьтесь, что находитесь в начальном каталоге.
$ cd $HOME
$ mkdir bin
После этого добавьте каталог bin в переменную PATH в файле .profile, затем заново инициализируйте файл .profile
$ . .profile
Теперь все должно получиться.
Если же проблемы остались, просмотрите главы 2 и 13. В этих главах содержатся сведения о командах find и xargs, а также о настройках переменных среды, которые окажутся полезными при создании и выполнении сценариев.
Все листинги книги являются полными. Чтобы запустить на выполнение сценарии, введите в файл команды, сохраните его на диске и выйдите из текстового редактора. Затем воспользуйтесь командой chmod для установки права выполнения. Теперь можно переходить к делу.
16.4. Заключение
Глава служит кратким введением в методику работы с shell–сценариями. Вероятно, вам пока нет необходимости подробно изучать вопросы, связанные с функционированием сценариев, вводом/выводом данных интерпретатора shell и т. п. Необходимые знания придут после внимательного изучения материала книги. Глава помогает пользователю уяснить, как начать работу с shell–сценарием.
ГЛАВА 17
Проверка условий
При создании сценария уточняется идентичность строк, права доступа к файлу или же выполняется проверка численных значений. На основе результатов проверки предпринимаются дальнейшие действия. Проверка обычно осуществляется с помощью команды test. Команда test используется для тестирования строк, проверки прав доступа к файлу и численных данных. Как будет показано в следующей главе, эта команда хорошо согласуется с условной конструкцией if, then, else.
В главе рассматриваются следующие темы:
• применение команды test для обработки файлов, строк и чисел;
• использование команды expr при проверке численных значений и строк. Команда expr выполняет проверку и вывод численных данных. Команды test
и expr с помощью кода завершения последней команды $? выводят на экран значение 0, если заданное условие выполняется, и 1, если условие не выполняется.
17.1. Проверка прав доступа к файлу
Основные
форматы команды test:test условие
или
[ условие ]
Обратите внимание, что с обеих сторон от условия обязательно остаются пробелы. При проверке права на доступ к файлу может применяться довольно много условий. В табл. 17.1 содержится перечень наиболее распространенных условий.
Таблица 17.1. Проверка прав доступа к файлу
– d
Каталог
– f
Обычный файл
– L
Символическая связь
– r
Файл для чтения
– s
Файл имеет ненулевой размер, он не пуст
– w
Файл для записей
– u
Файл имеет установленный бит suid
– x
Исполняемый файл
Чтобы проверить, установлено ли право записи для файла scores.txt, применяются оба метода проверки. При осуществлении проверки используется код завершения последней команды. Не забывайте о том, что возвращаемое нулевое значение свидетельствует о том, что условие выполняется, любое другое значение говорит о наличии ошибки.
$ ls -l scores.txt
– rw-r—г -l dave admin 0 May 15 11:29 scores.txt
$ [ -w scores.txt ]
$ echo $?
0
$ test -w scores.txt
$ echo $?
0
В обоих случаях отображается значение нуль, поэтому для данного файла установлены права записи. Теперь рассмотрим, является ли этот файл исполняемым.
$ [ -х scores.txt ]
$ echo $?
1
Нет, не является, что и следовало ожидать после изучения списка прав доступа для файла scores.txt.
В следующем примере проверяется существование каталога appsbin.
drwxr-xr-x 2 dave admin 1024 May 15 15:53 appsbin
$ [ -d appsbin ]
$ echo $?
0
Ответ утвердительный, каталог appsbin присутствует. Чтобы проверить, установлен ли бит suid, примените:
– rwsr-x--- 1 root root 28 Apr 30 13:12 xab
$ [ -u xab ]
$ echo $?
0
Из этого примера следует, что бит suid установлен.
17.2. Применение логических операторов при осуществлении проверки
Итак, проверка прав доступа к файлу была осуществлена, но иногда возникает необходимость в сравнении различных прав доступа. Чтобы реализовать подобную проверку интерпретатор shell предлагает три типа логических операторов;
– a
Логическое AND, возвращает истину, если обе части оператора принимают истинное значение
– o
Логическое OR, возвращает истину, если какая-либо из частей оператора может принимать истинное значение