Несмотря на то, что 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", а если не было присвоено значение, то пустая строка. |