Использование кавычек для отмены значения символа пробел
Кавычки, как и обратная косая черта, часто используются для отмены специального значения пробела. Shell интерпретирует пробел в командной строке как разделитель между аргументами команды. Одиночные и двойные кавычки и обратная косая черта позволяют отменить это значение. Например, чтобы в тексте разместить два или более слова, сделайте эти два слова одним аргументом, заключив их в кавычки.
Создание простых программ shell и их выполнение
С помощью текстового редактора создайте файл dl и введите в него строки:
pwd<ENTER>
ls<ENTER>
echo This is the end of the shell program.<ENTER>
Теперь вы имеете программу shell. Вы можете отобразить это содержимое файла с помощью cat:
cat dl<ENTER>
Выполнить shellпрограмму вы можете с помощью команды sh. Введите:
sh dl<ENTER>
С помощью команды chmod вы можете сделать файл исполняемым:
chmod u+x dl<ENTER>
Обратите внимание, что chmod включает разрешение на выполнение (+x) для пользователя (u). Теперь dl является исполняемой программой. Попытайтесь выполнить ее. Введите: dl<ENTER>
При выполнении данного примера вызвать dl не удастся. Дело в том, что в пути поиска не указан текущий каталог. Исправить положение можно двумя способами: дополнить PATH (переменная, определяющая имя пути, используемое shell для нахождения команд) символом, или вызвать указанную команду с указанием полного пути доступа:
PATH=”PATH: .”; dlвариант 1
./dlвариант 2
Ограничения при именовании программ shell
Shellпрограмме вы можете дать любое имя, не совпадающее с именами системных команд. Если имя вашей программы совпадает с именем команды системы, то система будет выполнять вашу команду вместо системной.
Переменные
Shell программы манипулируют с переменными. Такими как:
· позиционные параметры;
· специальные параметры;
· именованные переменные.
Позиционные параметры
Позиционные параметры являются переменными в shell программе. Их значение устанавливается из аргументов, указанных в командной строке, которая вызывает программу. Позиционные параметры нумеруются, и на них идет ссылка символами $:$1, $2, $3 и т.д. Shell программа может использовать до 9 позиционных параметров. Если shell программа вызывается с помощью командной строки наподобие:
shell.prog pp1 pp2 pp3 pp4 pp5 pp6 pp7 pp8 pp9 <ENTER>
то позиционному параметру $1 в программе присваивается значение pp1, $2 - значение pp2 и т.д. во время вызова программы. Чтобы практически рассмотреть это замещение позиционных параметров сделайте следующее. Команда who перечисляет всех пользователей, в данный момент зарегистрированных в системе. Можем создать простую программу whoson, которая будет сообщать, работает ли в настоящий момент конкретный пользователь. Введем в файл whoson командную строку: who | grep $1<ENTER>
Команда who перечисляет всех текущих пользователей системы, а команда grep осуществляет поиск строки, содержащей значение, соответствующее позиционному параметру $1. Теперь подставим конкретное имя в качестве аргумента в файле whoson, например, user1.
Если указанный пользователь user1 не зарегистрирован в данный момент в системе, grep завершится неудачно и whoson не будет ничего выводить на экран.
Специальные параметры
Наиболее важный из них : $?
Большинство команд shell возвращает коды, которые указывают, успешно ли завершилась команда. Если возвращаемое значение 0 (ноль), то команда выполнилась успешно. Коды возврата не печатаются автоматически, но их можно получить как значение этого параметра.
Именованные переменные
Переменная – это область данных, обладающая именем и содержимым. Имя может состоять только из букв и цифр и не может начинаться с цифры. Содержимое – любой текст. Значение именованной переменной вы присваиваете сами следующим образом:
name_variable=value<ENTER>
Обратите внимание, что ни слева, ни справа от знака равенства нет пробелов.
В следующем примере var1 - это имя переменной, а myname - значение строки символов, которое присваивается переменной:
Пример
var1=myname<ENTER>
Знак $ используется перед именем переменной в shell программе для ссылки на значение этой переменной. Если взять предыдущий пример, то ссылка $var1 говорит shell, что нужно заменить любую встретившуюся строку символов $var1 на значение myname.
Переменные могут хранить целые команды:
ls2=’ls –l’
$ ls2
Значение этих переменных вы можете определить двумя способами. Первый, вы можете ввести: echo $variable_name
Система распечатает значение переменной variable_name. Второй способ: вы можете воспользоваться командой env для распечатки значений всех определенных переменных в shell. Для этого введите команду env и система выдаст список всех имен переменных и их значения.
Удаление переменных
Переменные сохраняются недолго. По завершении shell они теряются, поэтому уничтожать их вручную, как правило, не требуется. Если же возникла такая необходимость, используйте команду unset. Синтаксис: unset [имя _ переменной…]