Como alavancar uma variável definida pelo usuário em um comando para criar uma condição em um if [duplicate]

0

Eu tenho um script que recebe dados de duas variáveis dos usuários. Então, tento usar essas variáveis em um comando que, por sua vez, está sendo alimentado em uma condição em um if. No entanto, o valor de entrada do usuário não está substituindo minhas variáveis e, como resultado, meu comando não está funcionando -

# Get acl and dc values
echo "Type the ACL name:"
read acl
echo "Type the DATACENTER name"
read dc
# see if sw-list-cisco file exists in ~/$acl directory"
if [ ' ls -1 ~/$acl/sw-list-cisco > /dev/null | wc -l ' -gt 0 ];
then
    echo "Going to do something"
else
     echo "no match !!!!!!!!!!!!!"
fi

A condição if [ ' ls -1 ~/"$acl"/sw-list-cisco > /dev/null | wc -l ' -gt 0 ]; não parece estar substituindo $ acl pelo valor de entrada do usuário. Eu verifiquei manualmente que sw-list-cisco existe no diretório ~/$acl . o que estou perdendo?

    
por user168115 13.05.2017 / 08:19

2 respostas

4

Você raramente, ou nunca, precisa analisar a saída de ls .

Nesse caso, você pode conseguir apenas

if [ -f "$HOME/$acl/sw-list-cisco" ]; then

Estou usando o teste -f para testar se o nome fornecido existe e é o nome de um arquivo comum. Estou usando $HOME em vez de ~ desde ~ não se comporta como uma variável dentro de aspas (e $HOME é muito mais descritivo, IMHO).

    
por 13.05.2017 / 08:40
1
if [ ' ls -1 ~/$acl/sw-list-cisco > /dev/null | wc -l ' -gt 0 ];

Você redireciona a saída de ls para /dev/null , então nada vai para wc e sempre imprime 0 . O mesmo se você tentar manualmente: ls / >/dev/null | wc -l vs. ls / | wc -l .

Você provavelmente desejou redirecionar erros de ls para /dev/null :

if [ $(ls ~/"$acl/sw-list-cisco" 2>/dev/null | wc -l) -gt 0 ];

( -1 não é necessário quando a saída vai para um pipe.)

Mas como é apenas um arquivo, [ -f ~/"$acl/sw-list-cisco" ] fará isso com mais facilidade, já que @Kusalananda já respondeu . Mesmo se você quisesse uma contagem dos arquivos, seria melhor expandir um glob para um array e contar os elementos.

    
por 13.05.2017 / 12:19