Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
classic> <b>echo $version</b>classicclassic> <b>. /latest_set</b>latest version> <b>echo $version</b>latestlatest version>Как это работает
Сценарии выполняются, используя команду "точка", поэтому каждый из них выполняется в текущей командной оболочке. Это позволяет сценарию изменять параметры окружения в текущей оболочке, которая сохраняет изменения даже после того, как сценарий завершился.
Несмотря на призыв группы Х/Open применять в современных командных оболочках команду
printfechoПри этом возникает общая проблема: удаление символа перехода на новую строку. К сожалению, в разных версиях ОС UNIX реализованы разные решения. В ОС Linux общепринятый метод
echo -n "string to output"Но вы часто будете сталкиваться и с вариантом
echo -е "string to outputc"Второй вариант
echo -еctnЕсли вам нужен легко переносимый способ удаления завершающей новой строки, для избавления от нее можно воспользоваться внешней командой
trprintfecho -n#!/bin/bashКоманда eval позволяет вычислять аргументы. Она встроена в командную оболочку и обычно не представлена как отдельная команда. Лучше всего ее действие демонстрирует короткий пример, позаимствованный непосредственно из стандарта X/Open.
foo=10x=fooу='$'$хecho $уБудет выведено
$foofoo=10x=fooeval у='$'$хecho $увыведет на экран 10. Таким образом,
eval$Команда
evalУ команды
execНапример, строка
exec wall "Thanks for all the fish"в сценарии заменит текущую оболочку командой
wallexecВторой вариант применения
execexec 3< afileЭта команда открывает файловый дескриптор 3 для чтения из файла afile. Этот вариант редко используется.
Команда
exit<i>n</i>При программировании сценариев в командной оболочке код завершения 0 — успешное завершение сценария, коды от 1 до 125 включительно — коды ошибок, которые можно использовать в сценариях. Оставшиеся значения зарезервированы в соответствии с табл. 2.5.
Таблица 2.5
| Код завершения | Описание |
|---|---|
| 126 | Файл не является исполняемым |
| 127 | Команда не найдена |
| 128 и выше | Появившийся сигнал |
Многим программистам на языках С и С++ использование нуля как признака успешного завершения может показаться несколько необычным. Большое преимущество сценариев — возможность применения 125 кодов ошибок, определенных пользователем, и отсутствие необходимости в глобальной переменной для хранения кода ошибки.
Далее приведен простой пример, возвращающий код успешного завершения, если в текущем каталоге существует файл с именем .profile.
#!/bin/shif [ -f .profile ]; then exit 0fiexit 1Если вы любитель острых ощущений или, как минимум, лаконичных сценариев, можете переписать сценарий в виде одной строки, используя комбинацию И-списка и ИЛИ-списка, описанных ранее:
[ -f .profile ] && exit 0 || exit 1Команда
exportexportexport1export2