Sintaxe do Linux para if na linha de comando

1

O que há de errado com essa linha de cmd (Centos 7):

if (grep ssl_certificate /etc/nginx/conf.d/platform.conf)
then echo $(grep ssl_certc /etc/nginx/conf.d/file.conf) > /etc/nginx/conf.d/file-certs.conf
fi

No arquivo file.conf, há duas linhas com ssl_certificate e ssl_certificate_key. Ele deve mover os certificados SSL existentes de /etc/nginx/conf.d/file.conf para /etc/nginx/conf.d/file-certs.conf.

    
por ganna07 20.07.2018 / 14:27

1 resposta

19

Não há nada sintaticamente errado com o fragmento de código, mas é incomum.

Para testar se uma string é encontrada em um arquivo usando grep e fazer algo, se for esse o caso, use

if grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf; then

As opções -q , -w e -F tornarão grep quiet ( -q ) e corresponderão ao padrão fornecido como uma string fixa em vez de uma expressão regular ( -F ). Além disso, -w fará com que grep procure uma palavra completa . Nesse caso, a string ssl_certificate3 não corresponderia ao padrão.

grep retornará um status de saída zero se a string for encontrada no arquivo e o corpo da instrução if será executado.

A declaração

echo $(somecommand)

é um pouco inútil.

A substituição do comando $(somecommand) será substituída pela saída de somecommand e o shell executará a divisão de palavras e geração de nome de arquivo na cadeia resultante (que provavelmente não é desejada). Usar isso com echo é inútil no sentido de que você poderia ter feito

somecommand

A declaração completa if :

if grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf; then
    grep -wF ssl_certc /etc/nginx/conf.d/file.conf >/etc/nginx/conf.d/file-certs.conf
fi

(Isto assume que ssl_certc é uma palavra completa. Remova -w daquele grep caso contrário)

Alternativamente, usando a sintaxe de curto-circuito,

grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf &&
grep  -wF ssl_certc /etc/nginx/conf.d/file.conf >/etc/nginx/conf.d/file-certs.conf

Observe que isso substituirá o conteúdo de /etc/nginx/conf.d/file-certs.conf se esse arquivo existir. Altere > para >> para acrescentar ao arquivo, se a sobregravação não for intencional.

    
por 20.07.2018 / 14:45

Tags