Chame outros scripts com origem e torne a chamada condicional com instruções if

1

Eu tenho um script rsync que tenho em vários servidores. Em vez de reescrevê-lo para especificações em cada VM, pensei em criar outros scripts para os específicos e chamá-los com source . Eu pensei em colocar o source em uma declaração if da seguinte forma;

# Check for Atlassian Apps
if [[ "$SERVER_NAME=crowd.server.com" ]]; then
  # call crowd-bkup.sh
  echo -e "\e[1mCrowd backup running ...\e[0m"
  SCRIPTDIR=$(dirname "$0")
  # shellcheck source=src/crowd-bkup.sh
  # shellcheck disable=SC1091
  source "${SCRIPTDIR}/crowd-bkup.sh"

A minha pergunta é como eu adiciono mais para os gostos dos meus servidores Confluence, Jira etc.? É possível adicioná-los sem adicionar uma carga mais if declarações?

    
por eekfonky 19.11.2016 / 19:22

2 respostas

1

[[ "$SERVER_NAME=crowd.server.com" ]] é sempre true (testa se $SERVER_NAME=crowd.server.com se expande para uma string não vazia). Você quis dizer [[ "$SERVER_NAME" = "crowd.server.com" ]] .

Se você deseja executar diferentes processamentos para diferentes nomes de servidores, use case :

case "$SERVER_NAME" in
  crowd.server.com)
    echo -e "\e[1mCrowd backup running ...\e[0m"
    …
    ;;
  jira.server.com)
    echo -e "\e[1mJira backup running ...\e[0m"
    …
    ;;
  …
esac

Se você deseja executar o mesmo comando para vários nomes, é possível usar vários padrões separados por | . Você pode usar curingas de shell nos padrões, por exemplo,

case "$SERVER_NAME" in
  crowd.server.com|jira.server.com)
    echo -e "\e[1mBackup running in ${SERVER_NAME%.*}...\e[0m"
    …
    ;;
  *.mysubdomain.server.com)
    echo -e "\e[1mBackup running in mysubdomain...\e[0m"
    …
    ;;
  …
esac
    
por 20.11.2016 / 01:10
0

Você poderia fazer isso com uma matriz e agrupar o if dentro de um loop for:

#!/bin/bash

names=( crowd horde host army pack )

for n in "${names[2]}"; do
    # Check for Atlassian Apps
    if [[ "$SERVER_NAME=crowd.server.com" ]]; then
        # call "${n}-bkup.sh"
        echo -e "\e[1m$n backup running ...\e[0m"
        SCRIPTDIR=$(dirname "$0")
    # shellcheck source="src/$n-bkup.sh"
    # shellcheck disable=SC1091
    source "${SCRIPTDIR}/$n-bkup.sh"
done

Ou usando os argumentos posicionais:

set -- crowd horde host army pack
for $n; do
    .....
done
    
por 19.11.2016 / 20:27

Tags