BASH. Справочное пособие - страница 3



~/Документы$ find -print >filelist 2>no_access

Обнаруживаемые файлы направляются в файл filelist, а сообщения об ошибках в файл no_access

Проверка

~/Документы$ cat filelist

.

./Posix1.doc

./script

./script/sc01.sh

./no_access # новый файл

./rus2.doc

./filelist # новый файл

./otchet.doc

Глава 3.Функции.

Функция совокупность команд, выполняемых в

сценарии оболочки.

Синтаксис функции – имя (){ код-тело функции

} [ виды переадресации]

Обращение к функции происходит по имени. При выполнении функции не создается нового процесса. Она выполняется в среде соответствующего процесса. Аргументы функции становятся ее позиционными параметрами; имя функции – ее нулевой параметр. Прервать выполнение функции можно оператором "return [n]", где (необязательное) "n" – код возврата.

Функции вызываются таким же образом, как и

команды. Если используется ключевое слово function,то указывать () после имен необязательно

Пример создания простой функции с именем privet.

$ if [ "$USER"=max ]; then

> privet ( ) {

> echo "Privet Max";}

> fi

Запускаем функцию

$ privet

Результат

Privet Max

Характерно что функцию можно запускать многократно, результат будет тот же.

Функция в скрипте.

Функция fatal -выдать сообщение о неисправимой ошибке и прервать исполнение.

Пример 2

Создадим простой скрипт c функцией fatal.

$ cat >func1.sh

#!/bin/sh

fatal () {

echo "$0: fatal error:" "$@" >&2

exit 1

}

if [ $# = 0 ]

then

fatal not enough arguments

fi

Проверка

$ sh func1.sh

func1.sh: fatal error: not enough arguments

Пример 3

$ cat >myscript.sh

#!/bin/bash

function myfunc {

read -p "Enter a value: " value

echo "adding value"

return $(( $value + 10 ))

}

myfunc

echo "The new value is $?"

Запускаем скрипт

$ ./myscript.sh

bash: ./myscript.sh: Отказано в доступе

$ chmod +x myscript.sh

$ ./myscript.sh

Enter a value: 10

adding value

The new value is 20

Пример 4

$ cat run.sh

doSam () {

echo "magic"

return 0

}

if doSam;then

echo "Its true"

fi

$ sh run.sh

magic

Its true

В этом случае return 0 означает true, когда

return 1 в традиционном булевом смысле означает

false.

Глава 4.Переменные.

Переменные -это ячейка памяти,содержащаяся в себе

определенные данные. Имена переменных не должны

начинаться с цифры.

4.1 Присваивание значений переменным.

Значения присваиваются переменным с помощью операции = Присваиваемое значение не должно отделяться пробелами от имени переменной.

В одной строчке можно присвоить значение сразу

нескольким переменным.

$ firstname=Max lastname=Corn

$ echo $firstname; echo $lastname

Max

Corn

если значение по команде declare -i , то правая часть как вырражение

$ i=3+5 ;echo $i

3+5

$ declare -i jj; jj=5+3; echo $jj

8

4.2 Подстановка переменных.

Установить значение переменной,проверить.

$ a=123; echo $a;

123

$ echo {$a}

{123}

$ echo {\$a};

{$a}

echo {'$'$a}

{$123}

${переменная}

Использовать значение переменной для массивов.

$ a=(0 1 2 )

$ echo ${a[1]}

1

${переменная :-значение} Использовать

переменную, если она указана, иначе – заданное

значение.

$ b=5

$ echo ${b:-10}

5

max@hp:~$ echo ${c:-10}

10

${переменная :=значение}

Использовать переменную,иначе заданное значение, присвоив его указанной переменной

max@hp:~$ echo ${USER:=max2}

max

max@hp:~$ echo ${USER1:=max2}

max2

${переменная :?значение}

Использовать указанное значение если она

установлена, иначе выйти из оболочки.

$ echo ${c:?125}

bash: c: 125

${переменная :+значение}

Использовать указанное значение,иначе не

использовать ничего.

$ c=file1.txt

$ echo ${c:+filen.txt}