Implementando mudanças via script

0

Estágio de aprendizagem do roteiro de compreensão. Eu tenho que fazer isso abaixo mudar em cada novo sistema. Então eu criei esse script, infelizmente não está funcionando.

Eu quero entender que, se a entrada do usuário for lida e mantida em uma variável, como posso usá-la novamente após algum tempo. Como neste script, pedi ao usuário a entrada Is this a DNS Server e what is the rev of the server .

#!/bin/bash


    echo -n "Is this a DNS Server [y n]?"
    read command

    if [ $command = n ]
            then
                    yum -y install dnsmasq
                    yum -y install net-snmp net-snmp-utils
    elif [ $command = n ]
            then
                    echo $command

    else
            echo "DNS Package installation should be excluded"

    fi

cat <<EOF>>  scriptos.sh
!/bin/sh


export rev="avi"
export DNS_FLG="Y"
export DNS_FLG="N"
EOF


echo -n "what is the rev of the server"
read rev

if [ $rev = y ]
        then
                echo export LOC=$rev
if [ $rev = N ]
        then
                echo export DNS_FLG="Y"

if [ $rev = Y ]
        then
                echo export DNS_FLG="Y"

fi


echo "what your GW"
read GW
echo "what is your NW"
read NW

echo 192.168.0.0/16 via ${GW}  >  /etc/sysconfig/network-scripts/route-eth1
echo ${NW} via ${GW} >> /etc/sysconfig/network-scripts/route-eth1


/etc/init.d/network restart

Este script não está funcionando devido a este erro abaixo.

[root@centos6 ~]# ./script
Is this a DNS Server [y n]?y
DNS Package installation should be excluded
what is the rev of the servery
./script: line 57: syntax error: unexpected end of file
    
por Mongrel 26.05.2016 / 09:07

1 resposta

1

Primeiro: linguagens de programação são seletivas sobre a sintaxe. Em sh / bash, o [ funciona como um comando autônomo (diferente de parens na maioria das outras linguagens), então ele precisa ser separado por espaços, assim como todos os seus argumentos. Portanto:

if [ "$command" = y ]; then
    …
elif [ "$command" = n ]; then
    …
fi

Segundo: muitos dos seus blocos de condições estão sem o fechamento fi . É sempre if…then…fi .

Terceiro: alguns de seus prompts verificam se há% min_y/n, outros verificam maiúscula Y/N . Você deve sempre aceitar as mesmas entradas em todos os lugares. Por exemplo:

# option 1 – make the variable lower-case

if [ "${command,,}" = y ]; then
    …

# option 2 (bash-only) – use extended match

if [[ $command == @(y|Y) ]]; then
    …

# option 3 (sh/bash) – use 'case' alternatives

case $command in
    y|Y)
        … ;;
    n|N)
        … ;;
esac

Quarto: <<EOF redireciona entrada . O comando echo não recebe nenhuma entrada (apenas linha de comando). Se preferir, use cat <<EOF e não se esqueça de terminar o texto com uma linha EOF .

Por fim, certifique-se de colocar o cabeçalho #!/bin/sh ou #!/usr/bin/env bash no topo de todos os seus scripts.

    
por 26.05.2016 / 09:39