Как правильно подсчитать количество шагов, которые выполняются в скрипте в bash?

  • 18 августа 2023 г. 20:26
Ответы на вопрос 4
Вместо использования команды `grep | wc -l` для подсчета количества шагов в скрипте, можно воспользоваться переменной счетчика. В каждом шаге увеличивайте значение счетчика на 1.

Пример:

```bash
#!/bin/bash

# Инициализация счетчика
count=0

# Шаг 1
(( count++ ))
echo "Выполняется шаг 1..."

# Шаг 2
(( count++ ))
echo "Выполняется шаг 2..."

# Шаг 3
(( count++ ))
echo "Выполняется шаг 3..."

# Вывод общего количества шагов
echo "Всего шагов: $count"
```

Таким образом, вы можете точно знать количество шагов и использовать его для прогресс-бара или любых других нужд.
Тогда воспользуйтесь оператором "+=" для увеличения значения NOW_STEP на 1. Создание отдельных функций для каждого шага не имеет смысла. 
 Если количество шагов в вашем скрипте задано заранее, то добавьте статическую переменную в начало скрипта, чтобы она отслеживала количество шагов. Используйте grep в сочетании с командой wc для нахождения количества шагов. Обратите внимание, что grep тоже будет учитываться и добавлять 1. Однако, если количество шагов в скрипте динамическое, то использование функций перед и после каждого шага необходимо. Рассмотрите возможность организации шагов в массиве и выполнение циклом по массиву. Пример ниже поможет вам понять это лучше.
 

```bash
#!/bin/bash

# Определите шаги в массиве
steps=("initialize" "build" "deploy" "notify")

# Выведите общее количество шагов
echo "Всего шагов: ${#steps[@]}"

# Цикл по массиву шагов
for step in "${steps[@]}"; do
  echo "Выполнение шага: $step"
  # Вызов соответствующей функции
  $step
done

# Определение функций шагов
function initialize() {
  echo "Шаг initialize"
  # ваш код
}

function build() {
  echo "Шаг build"
  # ваш код
}

function deploy() {
  echo "Шаг deploy"
  # ваш код
}

function notify() {
  echo "Шаг notify"
  # ваш код
}
```
Выполняя этот скрипт, вы увидите, как выполняется каждый шаг в цикле, вызывается соответствующая функция и выводится соответствующее сообщение.
Похожие вопросы