русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Команды из набора SHELL-UTILS


Дата добавления: 2014-11-27; просмотров: 660; Нарушение авторских прав


Некоторые из перечисленных здесь команд обычно являются одновременно внешними командами из набора SHELL-UTILS и встроенными командами bash.

Подробное описание команд из этого набора см. в документации к GNU SHELL-UTILS.

Команды echo, pwd, test. Внешние команды, echo, pwd и test дублируют встроенные команды BASH и немного от них отличаются. Например, встроенная команда BASH echo не воспринимает escape-последовательности как таковые, если не указать специальную опцию "-e".

То есть, если написать:

echo "message1\nmessage2"',

то BASH не заменит "\n" на новую строку, а просто выведет эти символы на экран. Внешняя же команда echo всегда обрабатывает escape-последовательности и не требует ключа "-e".

Чтобы вызвать внешнюю команду вместо встроенной, нужно или указать путь, например "/bin/echo" вместо "echo", или запретить использование некоторой внутренней команды (enable -n echo) , и тогда BASH будет искать внешнюю. Проверить, дублируется ли некоторая внутренняя команда внешней, можно так:

type -a команда.

Let. Вычисляет арифметическое выражение и возвращает 0, если оно не равно нулю, и не-0 в противном случае. Среди прочих операций есть присваивание "=", можно присваивать значение переменной. В этом случае имя переменной должно быть без префикса "$", в прочих случаях можно работать и с "$" и без него.

[ ], test & /usr/bin/test. Проверяет истинность условия (тестирует условие). Существует в виде как встроенной, так и внешней команды. Если вместо слова test используются квадратные скобки, они обязательно должны быть отделены от аргументов пробелом, потому что на самом деле "[" ? это название команды, а " ]" ? обязательный последний аргумент этой команды. Можно комбинировать и отрицать условия:



[ условие1 - a условие2 ] - логическое И ,

[ условие1 - o условие2 ] - логическое ИЛИ,

[ ! условие ] - логическое НЕ.

Основные тесты:

-t [ fd ] истина, если file descriptor fd (по умолчанию 0) не перенаправлен. Например:

'! - t 0 ' - осуществляется ли ввод с клавиатуры .

Файлы:

-e file - истина, если существует

-s file - истина, если имеет ненулевой размер.

Пустая директория также может иметь ненулевой размер. Поэтому проверять, пуста ли директория, надо примерно так (пример из comp.unix.shell):

dir=${1:-.} # for a standalone script

set -- $dir/.??* $dir/.[!.] $dir/*

case $#$* in

"3$dir/.??* $dir/.[!.] $dir/*")

echo empty ;;

*)

echo not empty ;;

esac

-d file Директория

-f file Обычный файл (не директория)

file1 -ot file2 Старше (older than)

file1 -nt file2 Новее (newer than)

Строки:

-z string Пустая

-n string Не пустая

string1 = string2

string1 != string2

Числа:

arg1 -eq arg2 Равно

также -ne, -lt, -le, -gt, -ge

(not equal, less than, less or equal, greater than etc.)

expr (внешняя команда). Выводит результат выражения

A == B,

A + B,

A && B,

A || B,

length string,

substr string index length,

match string regexp или string : regexp.

 

Выводит номер символа, с которого начинается совпадение. Если в выражении есть "\(\)", вместо номера печатается часть строки, совпавшая с выражением в скобках.

В отличие от test, expr обычно не является встроенной командой, а имеется только в отдельном исполняемом файле. Лучше не использовать!Может замедлить выполнение скрипта в десятки раз. Везде, где это возможно, лучше применять test или let. Например, вместо:

expr $i + 1 == $n && break

лучше писать:

let i+1==n && break

или:

[ $[$i+1] = "$n" ] && break

 

tee. От названия английской буквы " T". T-shaped pipe splitter. Перенаправляет вывод стразу во много мест (файлов). Ключ " -a" заставляет дополнять существующие файлы, а не затирать.

Команда date не является командой bash, а входит в набор SHELL-UTILS. Однако представляется нелишним описать ее здесь, ввиду ее исключительной полезности для некоторых задач, традиционно решаемых написанием shell-скриптов, а также потому, что по причине обилия возможностей она имеет довольно нетривиальный синтаксис. Кроме описания, ниже будут даны примеры решения практических задач, связанным с обращением к данным о дате и времени, которые взяты из сообщений в comp.unix.shell.

К сожалению, помимо сложного синтаксиса работу с date затрудняет еще и то, что разные реализации date могут иметь опции с одинаковым названием и совершенно разными функциями. Приводимые ниже примеры тестировались на /bin/date из FreeBSD 2.2.5. В некоторых случаях в примерах указаны также отличия этой реализации от date из набора GNU SHELL-UTILS.

Формат вывода даты задается, например, так:

date +%d.%m.%y.

Ключ -v (-d в GNU date) позволяет напечатать не сегодняшнюю дату, а, например, завтрашнюю:

date -v +1d # /bin/date,

date -d "+1 day" # то же для GNU date.

или какая была месяц назад :

date -v -1m # /bin/date,

date -d "-1 month" # GNU date.

Вот такая команда, записанная в скрипте /etc/daily будет копировать каждый день выпуск сегодняшних новостей newsDDMMYY.txt в файл newstoday.txt:

cp `date +news%d%m%y.txt` newstoday.txt

 

Команды работы с именами файлов: basename, dirname, pathchk:

basename - имя файла без пути; если в качестве второго документа задать расширение, оно тоже отрезается;

dirname - пусть к файлу без самого имени файла;

pathchk - проверить, допустимо ли имя файла или пути в данной системе.

Внимание! Так же как при работе с expr (см.) и другими внешними командами, следует избегать частого применения данных утилит по причине замедления ими работы. dirname и basename без каких либо трудностей можно реализовать с помощью операций над переменными. В следующем примере определяются функции dirname и basename, идентичные по своему поведению одноименным утилитам dirname и basename, и демонстрируется их применение:

basename()

{

local name="${1##*/}"

echo "${name%$2}"

}

 

dirname()

{

local dir="${1%${1##*/}}"

[ "${dir:=./}" != "/" ] && dir="${dir%?}"

echo "$dir"

}

 

fullpath=${1:-/dir/file.ext}

name=`basename "$fullpath"`

dir=`dirname "$fullpath"`

echo "file '$name' is located in $dir"

выведет:

file 'file.ext' is located in /dir

Для того чтобы всегда вызывать эти функции вместо соответствующих внешних утилит, можно переименовать их в basename и dirname и записать в отдельный файл, например path.sh, а в файлы с использующими эти функции скрипты, добавить ". path.sh" (см. команду "." и source).

Полезными могут также оказаться функции для определения расширения имени файла (назовем ее ext) и имени файла без расширения (namename):

 

 

function ext

{

local name=${1##*/}

local name0="${name%.*}"

local ext=${name0:+${name#$name0}}

echo "${ext:-.}"

}

 

function namename

{

local name=${1##*/}

local name0="${name%.*}"

echo "${name0:-$name}"

}

 

Обратите внимание на то, что ни одна из показанных выше функций не вызывает других функций из этого же набора, хотя, например, dirname могла бы вызвать basename и отрезать от полного пути полученное из basename значение, однако такой вызов не осуществляется из соображений оптимизации скорости работы этих функций.

Другие внешние команды:

true, false, yes, printf;

tty - чем является стандартный ввод (tty / not tty);

sleep - заснуть на столько-то секунд;

nohup - запуск программы, продолжающей работать после logoff.

 

Информация о пользователях:

id, logname, whoami, groups, users, who

Информация о системе:

uname, hostname



<== предыдущая лекция | следующая лекция ==>
Перенаправление | Environment и атрибуты BASH


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.597 сек.