Этап обучения пониманию сценария. Я должен внести эти изменения в каждую новую систему. Поэтому я создал эти сценарии, к сожалению, они не работают.

Я хочу понять, что если пользовательский ввод читается и хранится в переменной, как я могу использовать его снова через некоторое время. Как и в этом сценарии, я попросил пользователя ввести их. Is this a DNS Server и 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

Этот скрипт не работает из-за этой ошибки.

[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

1 ответ1

1

Первое: языки программирования требовательны к синтаксису. В sh/bash [ работает как отдельная команда (в отличие от parens в большинстве других языков), поэтому ее необходимо разделять пробелами и всеми ее аргументами. Следовательно:

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

Второе: во многих ваших блоках условий отсутствуют закрывающие fi . Это всегда, if…then…fi .

В-третьих: некоторые из ваших запросов проверяют строчные буквы y/n , другие проверяют строчные буквы Y/N Вы должны постоянно принимать одни и те же данные везде. Например:

# 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

Четвертое: <<EOF перенаправляет ввод. Команда echo не принимает никаких входных данных (только командная строка). Вместо этого вы хотели бы использовать cat <<EOF , и не забудьте завершить текст строкой EOF .

Наконец, убедитесь, что поставили #!/bin/sh или #!/usr/bin/env bash header вверху всех ваших скриптов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .