Bash Site about Linux


Вернуться к оглавлению

C-style (Си-подобный синтаксис) в Bash



C-style стиль языка программирования C (Си) используемый в Bash.
Его целью является создание удобного способа вычисления арифметических выражений в цикле, а также произведения необходимых арифметических действий над переменными. Это один из главных механизммов "цикла со счетчиком" языка Си.


Запись арифметических операций в C-style.

Конструкции с двойными скобками допускают в Bash производить манипуляции с переменными в C-style, например, ((var++)) увеличивает значение переменной на 1.

[shonty@~]$ ((var=23)); echo "var = $var"
var = 23
[shonty@~]$ ((var++)); echo "var = $var"
var = 24
[shonty@~]$ ((var--)); echo "var = $var"
var = 23
[shonty@~]$ ((++var)); echo "var = $var"
var = 24
[shonty@~]$ ((--var)); echo "var = $var"
var = 23
Если предполагается изменять значение переменной не на 1, а на другое число, то выражение будет выглядеть так: ((var+=10)).
[shonty@~]$ ((var=23)); echo "var = $var"
var = 23
[shonty@~]$ ((var+=10)); echo "var = $var"
var = 33
Аналогично умножение:
[shonty@~]$ ((var=23)); echo "var = $var"
var = 23
[shonty@~]$ ((var*=10)); echo "var = $var"
var = 230
...и целочисленное деление:
[shonty@~]$ ((var=230)); echo "var = $var"
var = 230
[shonty@~]$ ((var/=10)); echo "var = $var"
var = 23
[shonty@~]$ ((var/=10)); echo "var = $var"
var = 2
[shonty@~]$ ((var/=10)); echo "var = $var"
var = 0

Здесь нужно оговориться об особенности применения двойных круглых скобок:
  • Двойные скобки допускают наличие лишних пробелов в выражениях: (( var = 1 ))
  • В двойных скобках символ "$" перед переменными опускается: (( var <= 5 ))


C-style для цикла for

Стиль характеризуется тремя параметрами:
  • EXPR1 присвоение значения переменной (до запуска первой петли цикла)
  • EXPR2 тестирование цикла на условие завершения
  • EXPR3 изменение значения переменной (например приращение)
for (( EXPR1; EXPR2; EXPR3 ))
do
  <список команд>
done
что соответствует циклу с оператором while:
((EXPR1))
while ((EXPR2)); do
     <список комманд>
     ((EXPR3))
done

Пример счетчика от 0 до 5 с приращением 1:
#!/bin/bash
for ((x=0; x<=5; x++)); do
echo "Counter: $x"
done
или в одну строку (с результатом выполнения):
[shonty@~]$ for ((x=0; x<=5; x++)); do echo "Counter: $x"; done 
Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5

Альтернативный синтаксис

Существует также альтернативный и более изящный метод записи счётчика (хоть он и работает, но этот синтаксис не документирован и не рекомендован к использованию):

for ((x=0; x<=5; x++))
{
  echo $x
}
или в одну строку (с результатом выполнения):
[shonty@~]$ for ((x=0; x<=5; x++)); { echo "Counter: $x"; }
Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5

Вернуться к оглавлению







Яндекс.Метрика
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS