스크립트를 통한 변경 사항 구현


0

이해 스크립트의 학습 단계. 나는이 모든 것을 새로운 시스템마다 변화시켜야한다. 그래서이 스크립트를 만들었습니다. 불행하게도 작동하지 않습니다.

사용자 입력을 읽고 변수에 보관하면 시간이 지나면 어떻게 다시 사용할 수 있는지 이해하고 싶습니다. 이 스크립트 에서처럼 사용자에게 입력 내용을 묻습니다. Is this a DNS Serverwhat 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

첫 번째 오류는 if 문에서 잘못된 형식의 표현식으로 인해 발생합니다. 추가하십시오. n 내부 따옴표. (그만큼 $command 공백이있을 수있는 경우에 따옴표로 묶을 수도 있습니다).
AirPett

답변:


1

첫 번째 : 프로그래밍 언어는 구문에 대해 까다롭게 사용됩니다. sh / bash에서는 [ 독립형으로 작동합니다. 명령 (다른 대부분의 언어에서는 괄호와 달리) 공백뿐만 아니라 모든 인수로 구분해야합니다. 따라서:

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 헤더를 모든 스크립트 상단에 추가하십시오.


중력 나는 당신의 제안에 따라 질문을 수정했다. 그러나 여전히 라인 57에서 오류가 발생합니다.
Mongrel

내가 만든 파일을 볼 수 있어요. scriptos.sh 그게 나에게 묻고 echo -n "what is the rev of the server" 하지만 내가 어떤 것을 입력하면 그것은 나에게 오류를 준다. ./script: line 57: syntax error: unexpected end of file
Mongrel

포인트 # 1과 # 2 참조; 아직 하반기에는 수정하지 않았습니다.
grawity
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.