Несмотря на то, что 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
Следует обратить также внимание на обязательные пробелы, отделяющие переменные и знаки операций.
С командой "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
${x-new} - в качестве значения "x" будет выдано "new", ${y=new} - в качестве значения "у" будет присвоено "new", ${z?new} - в качестве значения "z" будет выдано "z: new" и соответствующая процедура прекращается.
${z+new} - в качестве значения "z" будет выдано "new", а если не было присвоено значение, то пустая строка.