Para loop com condições

0

Eu tenho um script que adiciona usuário em vários servidores. Desde que eu estou adicionando em muitos servidores que estou usando para loop.

Abaixo está a saída quando o usuário é adicionado com sucesso.

0,22529,User added.

Se o usuário não for adicionado, recebo este erro

1,23996,CLI failed to connect to database.

OR

1,22560,The current state of the server does not allow this action.
script Begin

read user
echo -e '\E[32;40m'"3[1mPlease wait .... adding id on all server3[0m"
PORT=777
USER=User
PASSWORD=****
for server in server1.abc.com server2.abc.com 
do
command // to add user 
done

Script end

Eu quero o eco do usuário adicionado e do usuário não adicionado com base na lista de servidores passada por loop.

Por exemplo.

User added in server1.abc.com
user failed to add in server2.abc.com

Qualquer ajuda seria muito apreciada.

    
por maneeshshetty 20.01.2013 / 07:16

2 respostas

1

Se você quiser usar a saída padrão de um determinado comando, poderá usar substituição de comando e envolva-o dentro de um $(…) .

Podemos verificar se a saída está de acordo com uma determinada expressão regular com o operador =~ introduzido no Bash 3 e acima. Se a expressão regular corresponder, o teste retornará verdadeiro, para que possamos executar outro comando após && . Se não corresponder, o teste retornará false e os comandos após || serão executados.

Como queremos verificar se a saída contém a palavra added , o seguinte é suficiente:

for server in server1.abc.com server2.abc.com 
do
  [[ "$(command)" =~ added ]] \
    && echo "User ${user} added in ${server}" \
    || echo "User ${user} failed to add in ${server}"
done

Em seu script, você deve alterar USER para user , pois $USER é uma variável de ambiente global com o seu nome de usuário. Tente executar echo $USER da sua linha de comando para ver o que quero dizer.

    
por 20.01.2013 / 14:46
1
for server in ...; do
    command | while IFS=, read exitstatus id message; do
        if [[ $exitstatus == "0" ]]; then
            echo "User added on $server"
        else
            echo "Failed to add user on $server: $message"
        fi
    done
done

No entanto, verifique o status de saída real de command - ele retorna um status de saída diferente de zero para falha?

for server in ...; do
    if output=$(command); then
        echo "User added on $server"
    else
        echo "Failed to add user on $server: $output"
    fi
done
    
por 20.01.2013 / 14:47