Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BASH конспект(2).doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
163 Кб
Скачать
☆

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

true

false

yes

printf

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

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

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

 

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

id, logname, whoami, groups, users, who

 

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

uname, hostname

ENVIRONMENT И АТРИБУТЫ БАША

Environment ≈ массив переменных, который наследуется вызываемыми башем программами. Это не все переменные, а только те, которые унаследовал сам баш, и те созданные в баше переменные, которым был присвоен признак "экспортируемых".

Атрибуты баша, или флаги, включают особые режимы функционирования баша. Устанавливаются командой set (см.).

export

Команда export и используется добавления переменных к environment.

Переменные, созданные в баше, не входят автоматически в environment (массив переменных, наследуемый запускаемыми программами). Однако это можно изменить с помощью команды set (см.).

Экспортировать можно как переменные, так и функции (-f).

В принципе, команда export не нужна, так как вместо нее можно использовать declare -x.

Чтобы изъять переменную из environment, нужно использовать

export -n var

declare, typeset

typeset -- устаревшее, но разрешенное название declare. Используйте это название, если хотите обеспечить с совместимоть с Korn shell.

Без аргументов выводит значения всех переменных. Если вызвана таким образом из скрипта, ведет себя довольно странно: сначала выводит текст скрипта, предшествующий команде set, затем все переменные, а затем ≈ текст скрипта, следующий за командой.

Если нет аргументов, но указаны опции, выводит определения переменных, имеющих такие опции, а именно:

-a -- массивы

-f -- функции

-i -- целые числа

-r -- только для чтения

-x --

экспортируемые

Если есть аргументы, то создаются переменные с указанными опциями или изменяются опции существующих. Если опция указана со знаком " +" вместо "-", она удаляется. Переменным попутно можно присвоить значения.

Пример:

declare -irx MAGIC_NUMBER=666

-- создает переменную MAGIC_NUMBER, которую нельзя изменять, которая всегда будет рассматриваться как целое число и которая автоматически добавляется к environment , как если бы была выполнена команда export. Кроме того, переменной присваивается значение.

Экспортировать и делать только для чтения можно не только переменные, но и функции (-f).

Внутри функций declare создает локальные переменные, аналогично local. В ksh (и в нек. реализациях sh?), не имеющем команды local, для создания локальных переменных можно использовать синоним declare typeset.

Опция опция -p показывает атрибуты переменной или всех переменных, если переменная не указана.

declare -r

выведет что-нибудь вроде:

declare -ri EUID="42"

declare -ri PPID="1"

declare -ri UID="42"

-- однако просто declare выведет переменные без указания их признаков. Зато:

export -p

работает так, как можно было бы ожидать от declare -p

readonly

Делает переменную или функцию (-f) read only или выводит список таких переменных (-p) . Аналогичную вещь делает 'declare -r', так что эта команда лишняя.

unset

Отменяет определение переменной или функции (-f).

set

Опции, переданные set , устанавливают атрибуты самого баша. Если вместо "-" перед атрибутом идет "+", атрибут сбрасывается. Если есть аргументы, set присваивает их позиционным параметрам $1, $2 и т. д.

Без опций и аргументов выводит все переменные. Если вызвана таким образом из скрипта, ведет себя довольно странно, как и команда declare (см.).

Атрибуты могут задаваться в короткой или длинной форме. В длинной форме ≈ через опцию -o. Опция -o без параметров выводит значения всех атрибутов:

set -o

выведет что-нибудь вроде:

allexport on

braceexpand on

emacs on

errexit off

histexpand on

ignoreeof off

interactive-comments on

monitor off

noclobber off

noexec off

noglob off

nohash off

nounset off

physical off

posix off

privileged off

verbose off

vi off

xtrace off

Интересные атрибуты:

emacs (нет короткого названия) -- расширенные возможности редактирования. В интерактивных шеллах установлена по умолчанию.

vi (нет короткого названия) -- возможности редактирования, аналогичные командам vi

a (allexport) -- автоматический экспорт всех переменных

e (errexit) -- прекращать работу, если команда, не входящая в группу, или группа команд возвратила ненулевое значение. При прекращении работы не выдается никаких сообщений.

f (noglob) -- запрещает обрабатывать маски (*, ? и т. д.).

h (hashall) -- запоминать пути к выполненным командам (по умолчанию)

n (noexec) -- не выполнять команды, только проверить их правильность

v (verbose) -- аналог echo on в ДОС

x (xtrace) -- расширенный аналог verbose

n (nounset) -- рассматривать использование неопределенной переменной как ошибку

C (noclobber) -- см. про переменную noclobber

P (physical) -- при смене текущей директории на линк, делать именем текущей директории не имя линка, а имя физической директории.

"--" -- если за этим ничего не следует, unset позиционные параметры.

ВСТРОЕННЫЕ КОМАНДЫ (SHELL BUILTINS)

команда ":" (двоеточие)

Осуществляет анализ командной строки, но не выполняет ее. Всегда завершается успешно.

#!/bin/bash

: $[a=2*2]

echo "a=$a"

-- выведет:

a=4

Значение переменной $a было присвоено в результате [[побочного эффекта]] анализа, выполненного командой ":".

source или "." (точка)

Выполняет команды из указанного файла в текущем баше, без запуска нового, как если бы содержимое файла набиралось на клавиатуре. Это позволяет, в отличие от выполнения скрипта, запомнить изменения в environment, определения функций и прозвищ. Используя эту команду, в программу можно включать "библиотечные" функции, определенные в других файлах.

enable

Запрещает (-n) или снова разрешает применение встроенной команды.

Когда запрещается, то вместо встроенной команды ищется файл, если его нет -- ошибка

exec

Если имеется аргумент, заменяет текущий процесс (bash) на выполняемую команду, и к башу возврата уже не происходит:

PerlProgram $scriptname && exec perl $scriptname

Если аргумент не указан, но указаны символы перенаправления, exec устанавливает эти перенаправления, и выполнение текущего скрипта продолжается. Подробнее см. [[Перенаправление]]

Таким образом достигается [[динамическое]] перенаправление.

echo Эта строка выводится на экран

exec >file.txt

echo А эта строка в файл

echo И эта в файл

Более того, можно открывать для ввода или вывода новые дескрипторы:

# создать файл-пример для последующего чтения

cat << EOF >user.rsp

29.06.77

30.01.85

EOF

exec 3>file.log

exec 4<user.rsp

echo Вводим дату через дескриптор 4

read d <&4

echo Дата получена и будет записана через дескриптор 3

echo $d >&3

getopts

getopts названия-опций переменная [ альтернативные-аргументы ]

Действует аналогично Си-функции getopt . Названия опций состоят из букв, соответствующих опциям. Если опция требует аргумент, после буквы ставится двоеточие.

Понимает "--" и дальше опции не смотрит Ни фига не понимает длинные . опции (--опция) .

! Если есть альтернативные аргументы, то анализируют их, а не $1-$n

Если опция имеет аргумент, он помещается в OPTARG.

OPTIND сначала равен 1, затем гетопт его увеличивает. Если надо запустить гетопт снова, надо снова присвоить единицу.

После первого неудачного гетопта ($? не равен 0) $OPTIND равен номеру первого аргумента, не являющегося опцией, если такой есть ($OPTIND <= $#). Чтобы обработать этот и последующие аргументы, нельзя писать ${$OPTIND}, поскольку номер параметра обязан быть константой. Вместо этого нужно сделать

shift $[$OPTIND-1]

и обращаться к $1 и т. д.

Если ошибочная опция, в переменной присваивается "?", и выдается сообщение об ошибке. Чтобы запретить вывод сообщений, надо или OPTERR=0 (по умолчанию 1), или первый символ в названиях опций ":".

Пример:

while getopts "qhe:v" arg

do

echo "Opt: $arg ${OPTARG:+($OPTARG)}"

case $arg in

q) quiet=1;; # установить quiet mode

h) echo Using: $0 [-q] [-h] [-e scriptfile] FILES...;

exit;;

e) scriptfile=OPTARG;; # задать файл с программой

esac

done

shift $[$OPTIND-1]

while [ -n "$1" ]

do

echo Processing file $1...

# разные действия...

shift

done

hash

Показывает таблицу запомненных расположений команд. Можно стереть (-r), вопрос только в том, зачем то и другое.

pushd, popd, dirs

dirs выводит стек запомненных директорий

popd удаляет или последнюю запомненную, или такую-то по счету сверху стека (+0..n) или снизу (-0..n).

type

Похожа на команду which.

Информация о том, как проинтерпретировалась бы команда, будь она набрана в командной строке: Полное имя файла или сообщение типа 'shell builtin' или 'aliased to...'.

можно только тип ( -t): file, builtin, alias, keyword

Можно вывести все альтернативы ( -a ), например type -a ls" вернет "/bin/ls и ls is aliased to `gnuls --color=tty'"

ulimit

Показывает или устанавливает ограничения на что-либо. Можно показать все ограничения (-a)

umask

Атрибуты, с которыми создаются файлы данного пользователя. Без параметров показывает текущие в виде числа или букв (- S)

alias, unalias

создают и удаляют прозвища

ИСТОРИЯ КОМАНД И КОМАНДЫ ИСТОРИИ

history

Показывает всю историю, или последние n команд.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]