Вячеслав Ткачев - BASH. Справочное пособие
- Название:BASH. Справочное пособие
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:2022
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Вячеслав Ткачев - BASH. Справочное пособие краткое содержание
BASH. Справочное пособие - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
в доступе.
2.11 Сохранение дескрипторов файлов в переменных.
Допускается указывать имя переменной вместо
числового обозначения дескриптора.
Пример. Нахождение дескриптора файла.
$ exec 4>file;echo "OK">&4; cat ./file
OK
max@hp:/dev/fd$ ls
0 1 2 255 4
max@hp:/dev/fd$ cat 4
OK
Пример использования дескрипторов числом более 9
$ mv f1.txt f1
$ echo f1 {f1fd}>xyz
f1
$ echo $f1fd
11
$ cd /dev/fd
max@hp:/dev/fd$ ls
0 1 11 2 255 4
max@hp:/dev/fd$ echo "Privet">&11
max@hp:/dev/fd$ cat 11
Privet Дескриптор файла,сохраненный в переменной оболочки может быть использован в сценарии.
2.12 Специальные имена файлов.
/dev/stdin Дубликат дескриптора файла 0
/dev/stdout Дубликат дескриптора файла 1
/dev/stderr Дубликат дескриптора файла 2
/dev/fd/ Дубликат дескриптора файла
/dev/tcp// или /dev/udp//
Оболочка Bash устанавливает соединение с указанным хостом через заданный порт, используя полученный в итоге дескриптор файла при переадресации ввода-вывода.
~/Документы$ 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}
filen.txt
$ echo ${d:+filen.txt}
$
${#переменная} Использовать длину указанной
переменной.
$ echo $c
file1.txt
$ echo ${#c}
9
$ ${#*},${#@} Использовать количество позиционных параметров.
${переменная #шаблон}
Использовать после удаления слева
теста ,совпадающего с шаблоном. Удалить самый короткий совпадающий фрагмент.
c=file1.txt
1.txt
${переменная##шаблон} Удалить самый длинный
совпадающий фрагмент
$ echo ${c##file}
1.txt
${переменная ##шаблон} То же что и
ранее ,короткий и длинный фрагмент справа.
${переменная %шаблон}
${переменная %%шаблон}
$ echo ${c%.txt}
file1
max@hp:~$ echo ${c%%txt}
file1.
${переменная /шаблон/замена}
$ data=`date`
$ echo ${data}
Чт июн 13 10:56:05 MSK 2019
$ echo ${data/Чт}
июн 13 10:56:05 MSK 2019
${переменная //шаблон/замена}
$ echo ${data//Чт июн/Пт июль}
Пт июль 13 10:56:05 MSK 2019
${переменная /#шаблон/замена}
${переменная /%шаблон/замена}
Использовать max@hp:~$ greeting="hello friend"
$ declare -n message=greeting
$ echo message
message
$ echo $message
hello friend
$ message="by now"
$ echo $greeting
by now
$ {переменная@P} Вычислить значение указанной переменной.
$ echo ${c@P}
file1.txt
$
$ {переменная@Q} Заключить в кавычки значение указанной переменной.
$ c=file1.txt
$ echo ${c@Q}
'file1.txt'
${!переменная }
Использовать значение указанной переменной в качестве имени другой переменной ,значение которой должно быть использовано.
4.3 Косвенные переменные.
Косвенные переменные-это переменные именующие другие переменные.
Косвенные переменные создаются по команде
declare -n
Пример 1
$ greeting=privet
$ echo $greeting
privet
$ declare -n message=greeting
$ echo $message
privet
Пример 2 Присвоить через косвенную переменную
значение основной переменной.
$ message=otvet
$ echo $greeting
otvet
Пример 3 Применение псевдонима
$ text=ok
$ echo $(!text)
echo $(text=ok)
4.4 Переменные, встроенные в оболочку.
Основные переменные.
$# количество аргументов в командной строке.
$-Действующие в настоящее время
параметры,представленные в командной строке.
$? Выходное значение последней,выполнявшейся
команды.
$$ Номер процесса ,присвоенный оболочке.
$! Номер процесса,присвоенной
команде,выполнявшейся в фоновом режиме.
$0 Первое слово, имя команды.
$n Oтдельные аргументы командной строки,если больше 9 форма ${n}
$*,$@ Все аргументы командной строки ($1,$2..)
Пример 1
$ cat >param.sh
#!/bin/sh
echo "$#"
echo "$0"
echo "$?"
echo "$$"
echo "$@"
echo "$*"
exit 0
Запускаем скрипт с параметрами a b c d
Читать дальшеИнтервал:
Закладка: