Как предотвратить запуск второго скрипта после того, как первый преуспел в BASH - PullRequest
0 голосов
/ 22 марта 2020

Я сделал скрипт в bash, но он получился в некотором роде oop. Мой скрипт похож на обратную операцию со службой systemctl, и он работает так:

if systemctl status service | grep -q "Active: inactive"; then
    read -r -p "Service is inactive do you want to start it? : [y/N] : " response
    if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]
    then
        systemctl start `service` && echo "Service is active"
    else
        echo "Service stays inactive"
    fi
fi


if systemctl status service | grep -q 'Active: active'; then
    read -r -p "Service is active, do you want to stop it? [y/N] : " response
    if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]
    then
        systemctl stop service && echo "Service is inactive"
    else
        echo "Service stays active"
    fi
fi

Проблема в том, что когда он достигает первой части, и я хочу запустить его, он переходит на вторую часть, когда спрашивает меня, хочу ли я остановить это, есть ли способ предотвратить это bash и остановить это?

1 Ответ

2 голосов
/ 22 марта 2020

Используйте блок else:

toggle_service() {
  local response service=$1
  if systemctl is-active "$service"; then
    read -r -p "Service is inactive do you want to start it? : [y/N] : " response
    if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
        systemctl start "$service" && echo "Service is active" >&2
    else
        echo "Service stays inactive"
    fi
  else
    read -r -p "Service is active, do you want to stop it? [y/N] : " response
    if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
      systemctl stop "$service" && echo "Service is inactive" >&2
    else
      echo "Service stays active" >&2
    fi
  fi
}

... или версия СУШКИ :

toggle_service() {
  local action state_name response service=$1
  if systemctl is-active "$service"; then
    state_name=active; action=stop
  else
    state_name=inactive; action=start
  fi
  read -r -p "Service is ${state_name}, do you want to ${action} it?" response
  if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
    systemctl "$action" "$service" && echo "Action complete: ${action} ${service}" >&2
  else
    echo "${service} remains ${state_name}" >&2
  fi
}

Любой из них может быть вызван с помощью:

toggle_service sshd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...