Скрипт S SH Bash с оператором if - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь научиться писать Bash скриптов. У меня есть этот скрипт для обновления моих серверов через s sh. Я пытаюсь добавить проверку и условие, чтобы определить, использует ли ОС Yum или Apt, тогда она будет запускать соответствующие команды обновления. Кажется, что утверждение if else неверно, но я не уверен, как это исправить.

Вот сценарий:

#!/bin/bash
USERNAME="root"
HOSTS="host1 host2 host3"
apt_run="apt update && apt -y upgrade"
yum_run="yum check-update && yum -y update"

for HOSTNAME in ${HOSTS} ; do
    ssh -l ${USERNAME} ${HOSTNAME} 
    find_os=$( command -v yum || command -v apt-get ) || echo "Neither 
    yum nor apt-get found"
    if [[ $find_os='yum' ]]
       then
       "${yum_run}"
    else
       "${apt_run}"
    fi

done

1 Ответ

2 голосов
/ 19 января 2020

Вот мой скрипт для моих виртуальных машин.

#!/bin/bash

hosts=(
  leap151 kali ubuntu omv
)

for hostname in "${hosts[@]}"; do
ssh -t root@"$hostname" << 'EOF'
  if type -P zypper >/dev/null; then
    command zypper ref && command zypper up
   elif type -P apt-get >/dev/null; then
     command apt-get update && command apt-get upgrade
  else
    echo 'Neither zypper nor apt found!' >&2
    exit 127
  fi
EOF
done

Использовать массив для хоста. Поскольку вы используете bash, встроенный type подходит только для поиска исполняемого файла в вашей переменной PATH. См. help type для получения дополнительной информации. Используйте опцию -t в s sh, также используйте heredo c только то, что я сделал / сделал Выход 127 - это то, что должна завершить оболочка, если нет исполняемого файла, см. man 1p exit.

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