2014-12-06 4 views
1

나는 거의이 과정을 자동화 할 스크립트를 만들려고 노력했다의 예기치 않은 종료 점점 계속 : http://knowledgelayer.softlayer.com/procedure/add-additional-ips-redhat처음 BASH 스크립트를 시도, 파일

그것이 어떻게 작동하는지 잘 너무 확실하지 않았다, 그러나 didn를 내가 스크립트를 하나 만들 수있게되기까지 너무 오래 걸리지 않는다. 편집 # 2 : 업데이트 된 코드

편집 : 다음은 스크립트의 내용은이 주로 작업있어, 그러나 지금은 루프를 실행하고 정적 IP

#!/bin/bash 

path=/etc/sysconfig/network-scripts/ 
echo "Let's get your IP added :)" 
echo"" 


getnewip() 
{ 
echo read -p "Enter the new IP Address you wish to add: " staticip 
} 

getserverinfo() 
{ 
gateway=$(netstat -rn | sed -n 3p | awk '{print $2}') 
netmask=$(ifconfig eth1 | grep -i 'netmask' | grep -v '127.0.0.1' | awk '{print $4}') 
clone=$(ifconfig | grep eth1 | awk '{print $1}' | cut -d: -f2) 
} 


rangechecks() 
{ 
cd /etc/sysconfig/network-scripts/ 
ls ifcfg-eth1-range* 

filename==$1 
if [[ ! -f $filename ]]; then 
touch "$filename" 
echo "Created \"$filename\"" 

fi 

digit=1 
while true; do 
temp_name=$filename-$digit 
if [[ ! -f temp_name ]]; then 
touch "$temp_name" 
echo "Created $path\"$temp_name\"" 
digit=$((digit + 1)) 
fi 
done 
} 


writeinterfacefile() 
{ 
cat >> "/etc/sysconfig/network-scripts/$1" << EOF 
IPADDR_START=$staticip 
IPADDR_END=$staticip 
NETMASK=$netmask 
CLONENUM_START=$((clone+1)) 
EOF 

echo "" 
echo "Your information was saved in the file '$1'." 
echo "" 


} 
{ 
clear 
getserverinfo 
echo "" 
echo "Please verify this information: " 
echo "Gateway Address: " "$gateway" 
echo "Netmask: " "$netmask" 
echo "Your new IP: " "$staticip" 
echo '' 

while true; do 
read -p "Is this information correct? [y/N]" yn 
case $yn in 
[Yy]*) $writeinterfacefile;; 
[Nn]*) print "$getserverinfo" && exit ;; 
*) echo 'Please enter Y or n';; 
esac 
done 
} 
을 얻을 수있는 읽기 확인 절차 건너 뜁니다

나는 스크립팅에 대해 상당히 새롭기 때문에 무서운 구문을 변명하십시오. 내 눈은 그 EOF에 있지만 나는 단서가 없습니다.

+0

다음을보십시오. http://www.shellcheck.net/ – Cyrus

+0

실제로 모든 오류는 사라졌지 만 여전히 바람직하지 않은 결과를 얻고 있습니다. –

+0

'echo ""'또는'echo'를 사용하여 출력에 빈 줄을 삽입하지 않도록하십시오. 'echo -e '를 사용하십시오. \ nWhatever ... \ n "'또는'printf"\ nWhatever .. \ n \ n "'-e' 옵션을 사용하면 이스케이프를 해석 할 수 있습니다. printf는 항상 이스케이프를 해석합니다. 'syntax highlighting '을 가진 편집기를 사용하고 코드를 적절하게'들여 쓰기'하면 스크립팅 (예기치 않은 EOF를 찾는 것)이 크게 도움이 될 것입니다. 리눅스'konsole/gedit'는 gui-editors로 단단한 강조 표시가되어 있으며,'vim/emacs'는 훌륭한 텍스트 기반 편집자입니다. Windows 측에서'notepad ++ '는 좋은 강조 표시를 가지고 있으며'GPL'입니다. –

답변

0

난 첫 줄에서 당면한 들여 않는다 기능 rangechecks 또한

의 닫기 중괄호를 볼 수 없다.

+0

하나를 추가 한 후 다음과 같이 표시됩니다 : addips.sh : 줄 38 : 예기치 않은 토큰 근처에 구문 오류가 있습니다. '' ' addips.sh : line 38 :'}' –

1

rangecheckswhile 당신은 당신의 코드를 들여 쓰기를해야
done을 ...이없는, 더 }이 없습니다. 나는 그 일을하기 시작했고, 바로 그 오류를 알아 차렸다.

다른 것들 :

  • 작은 따옴표는 변수를 확장하지 않는, '/etc/sysconfig/network-scripts//$1는 사용자가 원하는 일을 할 수 없습니다.
  • echo ""echo과 같습니다.
  • foo='bar'; echo "blah" echo -n $foo은 'blah echo -n bar'를 출력합니다.
  • exit이 스크립트를 종료 할 때 나는 그 생각을 잘 모르겠습니다.
  • [y/N]은 보통 N (대문자)을 의미합니다.
    또한 enter Y or n에게 문의하십시오. 일관성있게하십시오!
  • 변수를 매개 변수로 사용할 때는 큰 따옴표를 사용하십시오. 이것은 그것이 (쉘에 의해 확장되지 않고 하나의 매개 변수로서) 그대로 유지되도록합니다.
+0

코드가 메인 포스트에 업데이트되었습니다. y/N 부분에 관해서는, 나는 단 한 번 할 필요가 있었습니까?! 나머지는 내가 고쳐 준다고 생각해. 빈 에코는 공백을위한 것입니다. 왜 그 습관에 있습니까? 이제 addips.sh가 표시됩니다 : 36 행 : 예기치 않은 토큰 근처에서 구문 오류가 발생했습니다. –

+0

내 피가 완료되었습니다.> Lmao. 스크립트가 작동합니다. 감사합니다. 보스! –

관련 문제