Wiki

Параметры

В командный файл могут быть переданы параметры. В 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" без параметров выводит на терминал состояние программной среды (см далее).