4. ����� SHELL (���������� � ���������)
�� ����� shell ����� ������ ��������� ����� � � ������� ������� "chmod" ������ �� ������������. ����� ����� ��� �� ��� �� ���������� �� ������ ������ �� UNIX.
4.1. shell-����������
��� shell-���������� - ��� ������������ � ����� ������������������ ����, ���� � �������������.
�������� shell-���������� - ������ ��������.
��, ��� � shell ����� ��� ���� ������: ������ �������� � ��������� ����, � ����� �������, ��������� ����� ��������� � ���������������� �������� �������������, ������� ����� ����������������� �� ������������, � � ������ �������, �������� ����� ���������� ������� � ������ �������������, ��������� � ����������� �������� ������������ � ������� �������� �������� �������.
������ ��������� ��������� ��, ��� �������������� ������������, ���������� � "��������� ����" shell, ����� �� ��� ��������� �� ����� ��� �������, ��� �� ��, ��, ��� �������� ���������, � ���� ������� ��� ��������� �������� ���� �������, ��� ������������� �� ��. (�� ��� ��� ������ "������� ��������").
��� ���������� ���������� ������������� ������������� �� ��������������, �.�. ������ ����� ���� ������������������ ����, ���� � �������������, ������������ � ����� ��� �������������.
��� ������������ �������� ���������� ����� �������������� �������� ������������ "=".
var_1=13 - "13" - ��� �� �����, � ������ �� ���� ����. var_2="�� UNIX" - ����� ������� ������� (" ") ����������, ��� ��� � ������ ���� ������.
�����: ������� �������� �� ��, ���, ��� ����������, ��� � �� �������� ������ ���� �������� ��� �������� ������������ ������� "=". ������, ��� ����� �� ��������, ������ ������ � ��������� ������ ����� ������ �� ������ ��� �������, �� � ������������ �������� ����������. �� ���� ��� ��� � ������� ������� � ������������� ������ �������� ������� (�������������������) ������� "=". |
�������� � ���� ������� ������������ �������� shell-����������. ��� �������� ������,
DAT=`date`
�������� � ����, ��� ������� ����������� ������� "date" (�������� ������� ������� � ���, ��� ������� ������ ���� ��������� ����������� � ��� �������), � ��������� �� ����������, ������ ������ �� ����������� �����, ������������� � �������� �������� ����������, � ������ ������ "DAT".
����� ��������� �������� ���������� � � ������� ������� "read", ������� ������������ ����� �������� ���������� � (����������) ������� � ���������� ������. ������ ������� "read" � ��������� ����� ������������ ������� "echo", ������� ��������� �������������� ������ �����-�� ��������� �� �����. ��������:
echo -n "������� ����������� �����:" read x
��� ���������� ����� ��������� ���������� �����, ����� ������ �� ����� ���������
������� ����������� �����:
������������� ����������� � ����� ����� ����� �������� � ����������. ���� �� �����, ������, "753" �� ��� � ������ ��������� ���������� "x".
���� ������� "read" ����� ��������� (���������) �������� ����� ��� ���������� ����������. ���� ���������� � "read" ������, ��� �� ������� (����� �������), ���������� ������������� ������ ������. ���� ������������ �������� ������, ��� ���������� � ������� "read", �� ������ ������������.
��������������. ��
����� ���� ������������� ���
����������� ������ ���� ����
������� ������� |
��� ��������� � shell-���������� ���������� ����� ������ ������� ������ "$". ��� �������
echo $var_2 echo var_2
������� �� �����
�� UNIX var_2
� ��� ���� ������. �������� ���������� �����:
echo "var_2 = $var_2"
������ �� �����
var_2 = �� UNIX
� ������� "echo" ������ ������������� "var_2" - ��� ������ �����, � ������ ("$var_2") - ��� �������� ��������������� ����������.
�� ��� ����� ������������ ������� ����� ������ ���������� � �������� ������������, � ����� ����� �������� ������������ � ���������, ��� ��� ������, ��� ����� �� ����� ���� ���� � �������, ���� ����������� �������� ����������. ���, ��� ������������� ����������� ������������, ������� � ���� ������ �����������. ������������, ������, w= �������� ������������ ���������� "w" ������ ������. �� � ������ ������ ����� ����������� ���������, �������� w="".
��� ����, ����� ��� ���������� �� ��������� �� �������, ��������� �� ������ ����������, ������������ �������� ������.
����� a=/mnt/lab/asu/
�����
cat /mnt/lab/asu/prim
�
cat ${a}prim
���������� (�.�. "cat" ������ �� ����� ���������� ������ � ���� �� �����).
���� ����� ������������, ��� � ������� ���� ���������� "prim" � "prim=dir" , �� �������
echo ${a}$prim
������ �� �����
/mnt/lab/asu/dir
4.2. �������������
���������� ����� �������� ������ �������������, ������������ � shell. � �������� ������� ������������� ������������ ������� ������� (" "), ��������� ������� (' ') � ���-���� (\).
�� �������� �������� �� ��������:
����� � ����� ������ ���������� ��������� ���c��������.
x=22 y=33 z=$x A="$x" B='$x' C=\$x D="$x + $y + $z" E='$x + $y + $z' F=$x\ +\ $y\ +\ $z
(������������ G=$x + $y �� ���� ��
��������� ��-�� ��������)
�����
echo A = $A B = $B C = $C echo D = $D E = $E F = $F eval echo evaluated A = $A eval echo evaluated B = $B eval echo evaluated C = $C
������� �� �����
A = 22 B = $x C = $x D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22 evaluated A = 22 evaluated B = 22 evaluated C = 22
��������. � ���� ��������� ������� ������������ ������������ ������� "eval" (�� evaluate - ����������), ������� � ������������� � ��� (� �������� ���������) ������� ��������� ����������� ���������� (���� ������� �������). � ���������� �������� "A" �������� �������, ��������� "A" ����� �������� "22". � ���������� "B" � "C" ����� �������� "$x". �� ���� �����������, ������� ���� ��������� �������� "eval" - evaluated "B" � "C" ���� �������� "22". |
��� ���� ������ �� "eval".
�����
w=\$v v=\$u u=5
� ���������� ���������� ������
echo $w eval echo $w eval eval echo $w
�� ����� ����� ��������
$v $u 5
�������� ��� �������, ��������� � �������������� �������� ������. ����� ���������� "string" ��������� �������� "�������" 2x3:
abc def
������� ��������, ��� ��� ��������� ������������ ������ �������� ������ ������ ������� ������ � ������ ������� ��������� ������:
string="abc def"
����� ��� �������� ������ ���������� � ������� "echo"
echo $string echo '$string' echo "$string"
����� �������������� ��� ��������� ����������:
abc def $string abc def
� ������������������ ������
echo "������ ������ ������ ������" > f1 echo '������ ������ ������ ������' > f2 cat f1 f2
���� ������ ��������������� ���������� ����� f1 � f2:
������ ������ ������ ������ ������ ������ ������ ������
������� �����, ��� ���-���� (\) �� ������ ���������� ��������� �� ��� ������, ��� ��������� ������������ ����������� ������� ������ ��� �������, �������������� ���� ���� (�� ����� ������������ � ��� ���� - \\), �� � ��������� ����� ���-���� ��������� ��'������� ������ � ���� (������������ ����� ������).
��������, ������������� ����� ������ ��������� ������:
cat f1 | grep -h result | sort | cat -b > f2
����� ���� ������� � ��������� �����, ������, ���
cat f1 | grep -h \ result | sort | cat -b > f2
������, ������ ����������� ��������� ������ ������������ � ������ ���������. � ������ ������ ��� ����� ���� ����� ����������� ���������, ��������:
cat f1 | grep -h result | sort | cat -b > f2
4.3. ����������� � shell-�����������
�������� �� ��, ��� shell-���������� � ����� ������ �������������� ��� ������, �. �. "35" - ��� �� �����, � ������ �� ���� �������� "3" � "5", � ���� ������� ��� ����� ������������������ �����, ��������, ��� ����� �����.
������������� ����������� ����� ������� "expr".
��������������� ��������� �� ��������:
���������� ���������� �����:
x=7 y=2 a=`expr $x + $y` ; echo a=$a a=`expr $a + 1` ; echo a=$a b=`expr $y - $x` ; echo b=$b c=`expr $x '*' $y` ; echo c=$c d=`expr $x / $y` ; echo d=$d e=`expr $x % $y` ; echo e=$e
������ �� �����
a=9 a=10 b=-5 c=14 d=3 e=1
��������. ��������
��������� ("*") �����������
������ ���� ��������������,
��������� � shell ���� ������
��������������, ���
����������, ����������, ��� ��
��� ����� ����� ����
����������� �����
������������������ ��������. ������� �������� ����� �������� �� ������������ �������, ���������� ���������� � ����� ��������. |
� �������� "expr" �������� �� ������ (�������������) �������������� ��������, �� � ���������:
A=`expr 'cocktail' : 'cock'` ; echo $A B=`expr 'cocktail' : 'tail'` ; echo $B C=`expr 'cocktail' : 'cook'` ; echo $C D=`expr 'cock' : 'cocktail'` ; echo $D
�� ����� ����� �������� �����, ������������ ����� ����������� �������� � �������� (�� ������). ������ �� ����� �� ����� ���� ������� ������ :
4 0 0 0
� �������, �� �������� ������ ����������.
���� ����������, ������ "�", "y", "z", �� ����������, �� ��� ��������� � ����������
${x-new} | � �������� �������� "x" ����� ������ "new", |
${y=new} | � �������� �������� "�" ����� ��������� "new", |
${z?new} | � �������� �������� "z" ����� ������ "z: new" � |
��������������� ��������� ������������.
�� ���� ���� �������, ���� ���������� ���� � ����� ������� ����������, �� �� �������� ������������ ������� �������.
� � ��������� ������ ��������, ����� ���������� "v" ����� �����-�� ��������, �����
${z+new} | � �������� �������� "z" ����� ������ "new", � ���� �� ���� ��������� ��������, �� ������ ������. |
4.4. ������� ����������
� �� UNIX ���������� ������� ��������. ������� ��������� �����, ����� ����������� �� ���������� �����-���� ������� (������).
��������, ��� ������ �� ���������� "� <Enter>" ����������� ������� ������� "�". � ���� ������� "�" ����� �������� ������ ��������. ��������, ��� "�" �������� ������� "�1" � "�2", ������� ��������������� ��������� ��������������� ��������.
� ������� �������� ���� ���� ����� - ��������� ��������� ��� ����������. ��������, �� ������� ������� "�" ��� ������������ �����, � ������� ��� ���� ���������� ��������� ���������� (� ����������� ���������� ���� ������ ��������� �����). ������ "�" ��������� ����� �����; ��� � ��� ����� ��������� ������� "�1" � "�2".
���������� �������� � ������ ��������, � ������� ��� ���������, �.�. ��� �� ��������� �������� (�������� ���������� ����������� - ��� ��� ������ ����). ��� ����, ����� ��� ���� �������� � ������ ����������� ���������, ���� �������� �� ����� �������. ��� ����� ������������ ���������� ������� "export".
������.
����� ������ (��������� ����) "p", ������� ���:
# ������ p echo ������ p varX=0 varY=1 echo varX=$varX varY=$varY export varY p1 # ����� ������� p1 p2 # ����� ������� p2 echo ����� ������ p: varX=$varX varY=$varY
�������� ��������� ����� "p1" � "p2", ������� ���:
# ������ p1 echo ������ p1 echo varX=$varX varY=$varY varX=a varY=b echo varX=$varX varY=$varY export varX # ������ p2 echo ������ p2 echo varX=$varX varY=$varY varX=A varY=B echo varX=$varX varY=$varY export varY
�� ����� ����� ������ ��������� ����������:
������ p varX=0 varY=1 ������ p1 varX= varY=1 varX=a varY=b ������ p2 varX= varY=1 varX=A varY=B ����� ������ p: varX=0 varY=1
�� ������� �����, ��� �������� ���������� �������������� ������ � ���������� ������� (� �� ���������� "�����" � "����"). �������������� ���������� ����� � �������� "set" � ������ "-a".
�� ������ ������ �������, ��� �� �������� �������� ���������� �������� ������� �� ��������� "����������" �������� ������������ (������) �������� � �������� �������. |
4.5. ���������
� ��������� ���� ����� ���� �������� ���������. � shell ������������ ����������� ��������� (�.�. ����������� ����������� �� ����������). � ��������� ����� ��������������� ���������� ���������� (���������� shell-����������) ���������� � ������� "$", � ����� ������� ���� �� ���� �� 0 �� 9:
����� ������ "examp-1" ���������� � ����������� "cock" � "tail". ��� ��������� �������� � ����� ����� ��� ������������ ������� "1" � "2". � (�����������) ���������� � ������ "0" ����� ��������� ��� ���������� �������.
��� ��������� � ���������� ����� ������ �������� ������ ������� "$" (��� � ��� ��������� � ����������):
$0 | ������������� ����� ������� ���������� �����; |
$1 | ������ �� ������� ��������; |
$2 | ������ �������� � �.�. |
����� ��������� ���� � ������ "examp-1" ����� ���
echo ��� ������ $0: sort $2 >> $1 cat $1
� ����� "cock" � "tail" �������� ��������������
cock:
��� ��������������� ����:
tail: 1 3 2
����� ����� ������ �������
examp-1 cock tail
�� ������ �����
��� ������ examp-1: ��� ��������������� ����: 1 2 3
��������� ����� ����������, � ������� ����� ������������ ���������, ���������� ����� ������, �.�. 9-� ("0", ��� ��� ���������� ����� ������ �����), �� ��� �������� �������� ����� ���������� ������������ ����������� ������� "shift".
���������� �� �������� �� �������.
����� ��������� ���� "many" ���������� � 13-� �����������
many 10 20 30 40 50 60 70 80 90 100 110 120 130
� ����� ���
### # many: �������� �������� ����� ����������. echo "$0: ����� ����������" echo " ����� ����� ���������� = $# �������� ���������: $1 $5 $9 " shift echo "1 �����: ������=$1 �����=$5 �������=$9" shift 2 echo "1 + 2 = 3 ������: ������=$1 �����=$5 �������=$9" perem=`expr $1 + $2 + $3` echo $perem
� ���������� ������� ���������� ������� "shift" ������ �������� ������� ���������� ��� $1, ������ �������� ���������� ��� $2, ... ������� ��������, ������� ��� ������� ����������, ���������� ��� $9. �� ���� ����������� ������ ��������!
����� ���������� ����� ������� �� ������ �����:
many: ����� ���������� ����� ����� ���������� = 13 �������� ���������: 10 50 90 1 �����: ������=20 �����=60 �������=100 1 + 2 = 3 �����: ������=40 �����=80 �������=120 150
������������ ������ � ���������� ���� ������� "set".
��������, �������� �������
set a b � echo ������=$1 ������=$2 ������=$3
������ �� �����
������=a ������=b ������=c
�.�. ������� "set" ������������� �������� ����������. ��� ������ ����� ������. ��������, ������� "date" ������ �� ����� ������� ����, ������, "Mon May 01 12:15:10 2000", ��������� �� ���� ����, �����
set `date` echo $1 $3 $5
������ �� �����
Mon 01 2000
������� "set" ��������� ����� ������������ �������� ���������� ���������, ��������:
set -v | �� �������� ��������� ������, �������� shell. |
Set +v | �������� ���������� �����. |
Set -x | �� �������� ��������� ������� ����� �����������. |
Set +x | �������� ���������� �����. |
������� "set" ��� ���������� ������� �� �������� ��������� ����������� ����� (�� �����).
4.6. ����������� shell-��������������
����� ������� ���������������� ������������� � ����������� ������, ������������ � ��������� ������, shell ��������� ��������� ���� �����������:
4.7. ����������� �����
������ ������� ����� �����, � ������� �� �����������. Shell ���������� ��� ���������� ���� �����.
���� �� �������� ������� "set" ��� ����������, �� �� ����� ����� ������ ���������� � ���� ����������� ����������, ��������� ��� ����� � ������� (� ������������ ����� ���� ����� ����� ��������� "�� ����������"), � ����� ����������, ��������� � �������������� ������ ����������.
���������� ��� � ���������� ���������� ���������� � ������� ������� ������� �� ����, ����� ������ UNIX ������������ � ��� �������������� �������.
��� ���� ����� ����, ��� ������ ��� ������� "set":
HOME=/home/sae PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11: IFS= LOGNAME=sae MAIL=/var/spool/mail/sae PWD=/home/sae/STUDY/SHELL PS1=${PWD}:" " PS2=> SHELL=/bin/bash TERM=linux TERMCAP=console|con80x25|dumb|linux:li#25:co#80:: UID=501 perem=stroka x=5
��������������� ��� ������������ �������� ����������.
HOME=/home/sae | ��� ��� ��������� ����������, � ������� ������������ (� ������ ������ �) ����������� ����� ����� � �������. �� ����, ��������� ������ ��� � ������, � ������� � ���������� "/home/sae". |
PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 | ��� ���������� ������
������������������ ������
(�����), ������� �������������
"shell" � ������� �������.
����� ������ ����������� �����
�����������.
������������������ ���������
������������� �����������
���������� ���� � �����. ��
������������� �����
���������� ����� ���
���������� ���������� ������.
� ����� ���������� ������
������ �������� �����
������������ �������, ��������
"echo", "cd", "pwd",
"date". ����� ����� �������
������������� ����������
"/bin", � ������� �����
���������� ������� "sh",
"cp", "mv", "ls" � �.�.
����� ���������� "/usr/bin" �
��������� "cat", "��",
"expr", "nroff", "man" �
������� �������. ����� �����
���������� � �������
���������� (".", ��� ������
����������� "�����",
�.�.""), ��� ������ �����
��������� ���������� ����
������� (�������). ����� ������ ��������� ������ � ������� <Enter> "shell" (����� ���������� ����������� �����������) ���������� ���, ��������������� ������� � ������������ �� ����� � �����������, ������������� � �����. ���� ������� ��������� ��� ���� �����������, ��� �� ����� �������. ���� ������������ ��������� ������ � ���������� ������, �� ������� ����� ��, ������� ����������� � ����������, ��������������� ������. �����, ��� � ������ ����������, ����� ����� ������, ��������, ����������� ��� �������� ����������. (������, �������������� ����� �������� �� "���������" ����� ���������� � ������������). |
IFS= | (���������� ����������� �����) ����������� �������, ������� ������ ��� ���������� ���� (�����). �������� �������� "������", "���������" � "������� ������", ������� ����� ����� �� ������������ ������ �� ����� � ������ ��� ������. |
LOGNAME=sae | ��� ����� ("���" ������������). |
MAIL=/var/spool/mail/sae | ��� �����, � ������� ��������� (�����������) �����. |
PWD=/home/sae/STUDY/SHELL | ��� �������� ���������� |
PS1=${PWD}:" " | ��� ��������. � ������ ������ � ��������� ����� ���������� ��� �������� ���������� ��������� � ������. �� ���� ����� ����� "/home/sae/STUDY/SHELL: ". |
PS2=> | ���� ������� (����� ">") ������������ ��� ����������� � ����������� ����� (� ��������� ������) ������������� �������. ��������, �������� ����������� ������ "(" � ����� ������� <Enter> � ��������� ������ �� ������� ���� ��������. ���� ���� �� ������, ��� ������ ������, �������� ����������� ������ ")" � �� ��������. |
SHELL=/bin/bash | ��� ���������� ��������� ��������, ������� ���������� ������������. � ������ ������ ������������ �� (�����������) shell ("sh"), � "�����������" ������ . |
TERM=linux | �������� ����
���������. -"bash",
���������� ��� �� �������
(Bourne-Again SHell) TERMCAP=console|con80x25|dumb|linux:li#25:co#80:: (TERMinal CAPacity) ��� (����� ������) ���������� ������ ������� ���������� ���������. |
UID=501 | ������������� ������������ (��� "501"). |
perem=stroka x=5 |
����������, ������� ���� ������������. |
�������� ����� ��������������� ������������� ��� ����� � ������� � �������������� ������ ���� "/etc/rc" � "/etc/.profile".
������ ���������. ���� �� �������� ������ ������� ����� (��������, ����� ������ ������, ��� ��������, ��� ��������, ���� ������ � �.�.) �����, ��������� ��� ���������� � ����� �������� ���������� � ������������������ ����� ".profile" (${HOME}/.profile), �������� ������ �������� ���������� �����. �� ���� ������� ��� ���� � �������� � ��������, ��� ���������). ����� ��� ������ ����� ����� � ������� ���� ���� ����� ������������� ����������� � ������������� ����� �����. ���� ���� ������ ����������� ����������� � ����� �������� ���������� (���������� �����). |
���� �� ������ ��������� � ".profile", �� ��� �������� ���� ��������� � ����� ���������� ��������� ���� ����. ��� ����� ����� ����� � ������ ����� � �������, � ����� ��������������� (���������� ��� ����� ������ ���������) �������� "." ��� ������ �� �������, �.�.
. .profile
������� ����� � ����, ��� ����� ������, ������������ � �����, ������ ����� ������ ������. ���, ��� �� �������� �� ����� ������� �������� "ls" - ���������� �������� ��� ������� � ������ "-a". ������, � �� ������������ ������� �������� "rm *".
�������� ����� ���� ���������� "my" � ����� ������ �����, ������� � ".profile", ��������
PATH=${PATH}:/home/sae/my
���
PATH=${PATH}:${HOME}/my
��� �������, ��������������� ���������� ����� ������� ��������������. ��������,
export TERM PATH REDKEYS MAIL
����� ����������� ���������� � ".profile" ����� ��������� �������, �������� �������
stty -lcase
��������� �������� � ����� "������� � ��������� �����"; � �������
cat ��������
������ �� ����� �������� , ������� �� ���� ����������� � ����� "��������" � ������ ����� ������������ ����������� � �������������� ������������.
��� ������������� shell ������������� ����������� �������� ��������� ���������� (����������):
? | ��������, ������������ ��������� ��������; |
$ | ����� ��������; |
! | ����� �������� ��������; |
# | ����� ����������� ����������, ������������ � shell; |
* | �������� ����������, ��� ���� ������; |
@ | �������� ����������, ��� ������������ ����; |
- | �����, ������������ � shell. |
��� ��������� � ���� ���������� (�.� ��� ������������� �� � ��������� ����� - shell-���������) ������� ������� ������� "$".
������. ����� �������
specific par1 par2 par3
�������� ���
### # specific: ����������� ��������� (����������) echo $0 - ��� ������� echo $? - ��� ���������� echo $$ - ������������� ���������� �������� echo $! - ������������� ���������� �������� �������� echo echo $* - �������� ����������, ��� ������ echo $@ - �������� ����������, ��� ���� echo set -au echo $- - ������ ������ ��������������
������ �� �����
specific - ��� ������� 0 - ��� ���������� 499 - ������������� ���������� �������� 98 - ������������� ���������� �������� �������� par1 par2 par3 - �������� ����������, ��� ������ par1 par2 par3 - �������� ����������, ��� ���� au - ������ ������ ��������������
��� "0" ������������� ����������� ���������� ��������.
������ ���� ��� �������� ���������� ������ ������ ����������� ���������� "$$", �������� ������� ������������� ������ ��������, ������������ ������ ������. ������ ����� ������, ����������� �����������, ���������� ���� ��� ��������� ���������, ������������� ���������� ������ �� �������. �������, ��������� ����� �������� � �������� ����� �����, ����� ���� ���������, ��� ������ ����� ���� ����� ����� ����� ��� (�� ��������� �� ����� ��� �������������). ����������� �������� � ������� ����������� ������ ������� ���������� ������. ����������, ����� ����� ����� ��������� ������. �, ���� � ������ ������� �������� ����� ����� ���� "�� �����", �.�., ����������� � ����, ��������� $$, �� ����� ����� ����� ����� ����� ��������. ��� ������� �������������� �������� ��� ������� ��������.
"echo" ��� ���������� ������� ������ ������.
�������� $* � $@ ������� � ���, ��� ������ ���������� ����� ���� ������������ ���
"par1 par2 par3"
� ������ ���
"par1" "par2" "par3"
������, �������������� �������� "$*" � "$@" ����� ���������� � ����� � ���������� "for".
��� ����������� �� ���������� �������� "set" ������ �������������� ("a" - ��� ����������� ���������� ��������������; "u" - ���������� ��������� ������� �������), ��� � ���������� � ����������� ���������� "$-".
[�����] [����������] [������]