A partir da sua descrição do que você está tentando alcançar, o seguinte pode ser um script que faz isso:
#!/bin/bash
server="${1,,}"
jumphost="$( awk -vs="$server" '$0 ~ s { print $1; exit }' "/home/Lists/srv" )"
if [[ -z "$jumphost" ]] || [[ "$jumphost" == "$server" ]]; then
ssh -qt "$server" "$2"
else
ssh -qt "$jumphost" "ssh -qt \"$server\" \"$2\""
fi
A expansão do parâmetro ${1,,}
diminuirá o valor de $1
. Para versões mais antigas de bash
, use o seguinte:
server="$( printf '%s' "$1" | tr 'A-Z' 'a-z' )"
A variável jumphost
será definida para o que estiver na primeira coluna da primeira linha no arquivo /home/Lists/srv
correspondente ao nome do servidor. Observe que isso só seleciona a correspondência primeiro no arquivo e que a correspondência está levando em consideração a linha todo .
Se a correspondência deve ser somente contra a segunda coluna, altere $0
para $2
no script Awk.
Se $jumphost
estiver vazio, ou se for o mesmo que $server
, então o primeiro ramo será escolhido, caso contrário, o segundo.
Uma explicação do script Awk foi solicitada:
jumphost="$( awk -vs="$server" '$0 ~ s { print $1; exit }'
Com -v
one define uma variável Awk para um valor específico. No comando acima, configuramos a variável Awk s
para o valor de $server
. Esta variável está então disponível no script Awk.
No script Awk,
$0 ~ s { print $1; exit }
o código dentro de { ... }
será executado sempre que a condição $0 ~ s
for verdadeira. A condição $0 ~ s
significa " $0
matches (a expressão regular) s
". A variável s
é a que fornecemos o valor de $server
antes e $0
é o conteúdo do registro atual (linha) que o Awk acabou de ler. Então, em suma, isso encontra uma linha no arquivo que contém o nome do servidor.
Para forçar uma correspondência exata na segunda coluna (por exemplo), pode-se usar $2 == s
como condição.
O código em { ... }
imprimirá $1
, que é o primeiro campo (coluna) de $0
(a linha), antes de sair do script. Eu estou escolhendo sair para que não acabemos combinando mais do que uma única linha. Se o usuário especificar um valor muito vago para $server
, corremos o risco de combinar várias linhas de outra forma.
Por fim, o valor gerado pelo Awk será atribuído à variável do shell jumphost
a $( ... )
, que é aproximadamente igual a '...'
.