Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

os_bash

.pdf
Скачиваний:
6
Добавлен:
13.02.2015
Размер:
230.16 Кб
Скачать

[stu003@rvs shell]$ echo "$PWD" /home/stu003/work/shell [stu003@rvs shell]$ echo "‘date‘" Fri Apr 6 18:26:58 MSD 2012

[stu003@rvs shell]$ echo "I’d say: \"Go for it\"" I’d say: "Go for it"

[stu003@rvs shell]$ echo "\" > "

"

[stu003@rvs shell]$ echo "\\"

\

3.3 Расширения (shell expansion)

3.3.1Фигурных скобок

ПРИМЕР

stu003@tplatform1:~> echo sp{el,il,al}l

spell spill spall

3.3.2 Тильды

ПРИМЕР

stu003@tplatform1:~> echo ~

/home/stu003

stu003@tplatform1:~> echo ~root

21

/root

stu003@tplatform1:~> echo ~/dir1/ /home/stu003/dir1/ stu003@tplatform1:~> cd work stu003@tplatform1:~/work> cd dir1 stu003@tplatform1:~/work/dir1> cd dir2

stu003@tplatform1:~/work/dir1/dir2> cd dir3 stu003@tplatform1:~/work/dir1/dir2/dir3> echo ~+ /home/stu003/work/dir1/dir2/dir3 stu003@tplatform1:~/work/dir1/dir2/dir3> echo ~- /home/stu003/work/dir1/dir2

3.3.3 Переменной или параметра

ПРИМЕР

stu003@tplatform1:~> VAR1=1 stu003@tplatform1:~> VAR11=2 stu003@tplatform1:~> echo $VAR11 2

stu003@tplatform1:~> echo ${VAR1}1 11

stu003@tplatform1:~> VAR1=VAR11 stu003@tplatform1:~> echo ${VAR1} VAR11

stu003@tplatform1:~> echo ${!VAR1} 2

22

3.3.4 Команды

ПРИМЕР

stu003@tplatform1:~> echo $(date)

Thu Apr 19 19:01:59 MSD 2012

stu003@tplatform1:~> echo ‘date‘

Thu Apr 19 19:02:02 MSD 2012

3.3.5Арифметического выражения

Вцелых числах фиксированной разрядности.

ПРИМЕР

stu003@tplatform1:~> echo $VAR1

VAR11

stu003@tplatform1:~> echo $VAR11

2

stu003@tplatform1:~> echo $(( VAR1 + VAR11 ))

4

stu003@tplatform1:~> echo $[ 3 + 2 ]

5

23

Таблица 41: арифметические операции

Приоритет

Операция

Значение

 

 

 

1

VAR ++, VAR --

пост-инкремент/декремент

2

++ VAR, -- VAR

пре-инкремент/декремент

3

+, -

унарный плюс/минус

4

!, ~

логическое/побитовое отрицание

5

**

возведение в степень

6

*, /, %

умножение/деление/остаток

7

+, -

сложение/вычитание

8

<<, >>

левый/правый побитовый сдвиг

9

<=, >=, <, >

сравнение

10

==, !=

равенство/неравенство

11

&

побитовая конъюнкция

12

^

побитовое исключающее «или»

13

|

побитовая дизъюнкция

14

&&

логическая конъюнкция

15

||

логическая дизъюнкция

16

hвыражениеi ? hвыражениеi :

условное вычисление

 

hвыражениеi

 

17

=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

присваивания

18

,

разделитель между выражениями

ПРИМЕР

stu003@tplatform1:~> VAR1=010

stu003@tplatform1:~> echo $VAR1

010

stu003@tplatform1:~> echo $(( VAR1 ))

8

24

stu003@tplatform1:~> VAR2=0xF

stu003@tplatform1:~> echo $(( VAR2 ))

15

stu003@tplatform1:~> VAR3=2#101

stu003@tplatform1:~> echo $(( VAR3 ))

5

3.3.6Процесса

Выражение <(cmd) или >(cmd) разворачивается в имя файла, связанного с именованным каналом (/dev/fd/N), который подключается к стандартному выво-

ду (вводу) команды vrb.

ПРИМЕР

stu003@tplatform1:~> echo <(ls) /dev/fd/63

stu003@tplatform1:~/work/dir1> diff <(ls -l) <(ls -al)

3.3.7Имён файлов

a)После подстановки:

-параметров;

-команд;

-арифметических выражений

происходит разбиение на слова между пробельными символами (если не внутри «"».

25

b)Затем каждое слово ищется на *, ?, [. Есть, значит слово рассматривается как образец и заменяется на отсортированный в алфавитном порядке список

файлов, удовлетворяющих образцу.

ПРИМЕР

stu003@tplatform1:~/work/dir1> echo .*

. ..

3.4 Алгоритмические конструкции

Возвращают код возврата последней исполненной команды или 0, если ко-

манды не были выполнены.

3.4.1 Условный оператор

Упрощённый синтаксис

if hкоманды проверкиi; then hкомандыi; fi

Истина соответствует нулевому коду возврата последней команды проверки.

26

27

Таблица 43: операции проверки

Выражение

Значение

 

 

[ -a hфайлi ] [ -e hфайлi ] [ -f hфайлi ] [ -d hфайлi ] [ -h hфайлi ] [ -L hфайлi ] [ -p hфайлi ] [ -b hфайлi ] [ -c hфайлi ] [ -S hфайлi ]

hфайлi существует

hфайлi существует и обычный файл hфайлi существует и каталог

hфайлi существует и символическая ссылка

hфайлi существует и именованный канал hфайлi существует и блочное устройство hфайлi существует и символьное устройство hфайлi существует и сокет

[ -r hфайлi ] [ -w hфайлi ] [ -x hфайлi ]

hфайлi существует и доступен для чтения hфайлi существует и доступен для записи hфайлi существует и доступен для исполнения

[ -s hфайлi ]

 

 

hфайлi существует и его размер больше 0

[ -N hфайлi ]

 

 

hфайлi существует и изменился с момента его последнего чте-

 

 

 

 

ния

 

 

[ hфайл1i

-nt hфайл2i

]

 

время последнего изменения у hфайл1i

больше, чем у hфайл2i

 

 

 

 

или hфайл1i существует, а hфайл2i не существует

[ hфайл1i

-ot hфайл2i

]

 

время последнего изменения у hфайл1i

меньше, чем у hфайл2i

 

 

 

 

или hфайл1i не существует, а hфайл2i

существует

[ hфайл1i

-ef hфайл2i

]

 

hфайл1i

и hфайл2i — ссылки на 1 и тот же файл

[ -z hстрокаi ]

 

 

hстрокаi пуста

 

[ -n hстрокаi ]

 

 

hстрокаi не пуста

 

[ hстрокаi ]

 

 

 

 

 

 

 

 

[ hстрока1i

== hстрока2i

]

hстрока1i

равна hстрока2i

 

[ hстрока1i

!= hстрока2i

]

hстрока1i

не равна hстрока2i

 

[ hстрока1i

< hстрока2i

]

 

hстрока1i лексикографически меньше, чем hстрока2i

[ hстрока1i

> hстрока2i

]

 

hстрока1i

28

 

 

лексикографически больше, чем hстрока2i

[ hчисло1i

-eq hчисло2i

]

hчисло1i

равно hчисло2i

 

[ hчисло1i

-ne hчисло2i

]

hчисло1i

не равно hчисло2i

 

Таблица 45

Приоритет

Операция

 

 

Значение

 

 

 

 

 

 

 

1

[ ! hвыражениеi ]

 

истина, если hвыражениеi ложь

2

[ (hвыражениеi ) ]

 

истина, если hвыражениеi истина

3

[ hвыражение1i

-a hвыражение2i

]

истина,

если

оба

hвыражение1i

 

[ hвыражение1i

-o hвыражение2i

 

и hвыражение2i истина

hвыражение1i

4

]

истина,

если

 

 

 

 

 

или hвыражение2i

истина

 

Встроенная команда [

ПРИМЕР

stu003@tplatform1:~> if ! grep $USER /etc/passwd ; then echo "non-loc"; fi

stu003:x:1001:100::/home/stu003:/bin/bash

stu003@tplatform1:~> grep $USER /etc/passwd

stu003:x:1001:100::/home/stu003:/bin/bash

stu003@tplatform1:~> if [ $? -ne 0 ] ; then echo "non-loc"; fi

Встроенная команда [[ Отличия от [:

-После подстановки переменных нет разбиения на слова (следовательно, нет необходимости помещать $VAR в «"»).

-Шаблоны в строках не расширяются в имена файлов. Вместо этого операции сравнения строк == и != проверяют соответствие строк образцам.

29

ПРИМЕР

stu003@tplatform1:~> VAR="administration one"

stu003@tplatform1:~> if [[ $VAR == admin* ]]; then echo "You’re admin"; fi You’re admin

Полный синтаксис

if hкоманды проверкиi;

then hкомандыi;

[elif hкоманды проверкиi; then hкомандыi;

... ]

[ else hкомандыi; ]

fi

ПРИМЕР

stu003tplatform1: > year=‘date +stu003tplatform1:~> if [ $[year % 400] -eq 0 \

-o $[year % 4] -eq 0 \

-a $[year % 100] -ne 0 ]; \

then echo "yes"; else echo "no"; fi

yes

#!/bin/sh

year=‘date +%Y‘

if (( ($year % 400) == 0 || ($year % 4) == 0 && (year % 100) != 0 )); then

30