2013-09-04 6 views
16
echo "Select your option:" 
echo "1. Change ip address" 
echo "2. Add route" 
echo "3. Reboot" 
echo "4. Exit" 
read A 
case $A in 
    1) 
      echo "Add Ip address" 
      read IP 
      echo "Add Netmask" 
      read Netid 
      echo "Add name of interface" 
      read Interface 
      ifconfig ${Interface} ${IP}/${Netid} 
      if [ $? -ne 0 ];then 
        echo "Ip address not configured" 
      fi 
      ;; 
    2) 
      echo "Add Destination" 
      read dst 
      echo "Add Netmask" 
      read Netid 
      echo "Add Gateway" 
      read gw 
      route add $dst mask $Netid gw $gw 
      if [ $? -ne 0 ];then 
        echo "Route not added" 
      fi 
      ;; 
    3) 
      reboot 
      ;; 
    4) 
      echo "Bye" 
      exit 0 
      ;; 
    default) 
      echo "Wrong selection" 
      exit 1 
esac 

오류 :' R': 명령을 찾을 수 없습니다

[[email protected] Downloads]$ ./NetworkUtility.sh 
./NetworkUtility.sh: line 1: $'\r': command not found 
Select your option: 
1. Change ip address 
2. Add route 
3. Reboot 
4. Exit 
1 
': not a valid identifier 7: read: `A 
./NetworkUtility.sh: line 8: $'\r': command not found 
./NetworkUtility.sh: line 9: syntax error near unexpected token `newline' 
'/NetworkUtility.sh: line 9: `case $A in 
[[email protected] Downloads]$ 
+4

스크립트 파일은 DOS/윈도우 스타일의 라인 엔딩 ('\ r에 \의 n')를 포함,이 쉘을 혼란 것입니다. 유닉스 라인 엔딩 ('\ n')으로 저장하십시오. –

+3

'tr -d "\ r" cleaned.sh'를 실행하고'./cleaned.sh'가 더 잘 작동하는지 확인할 수 있습니다. –

+0

이 질문에 대한 가장 불행한 점은 얼마나 오래 되었습니까? 두 줄짜리 줄 바꿈 (한 줄짜리와 한 줄짜리 빈 줄이있는 경우)이 정확히 20 줄짜리 스크립트를 만들지는 않을 것입니다. 같은 문제. –

답변

26

당신이 윈도우 스타일의 라인 엔딩 (\r\n)이 보인다 - 당신이 유닉스 스타일 (\n)로 변경해야합니다. dos2unix이 설치되어 있다면 그것을 사용할 수 있습니다. sed 또는 awk을 사용하여이 작업을 수행 할 수도 있습니다.

+7

이고 sed 명령은 ...'sed 's/\ r \ n/\ n/g ''이거나? – vikingsteve

+1

sed 명령은'sed 's/\ r $ //''일 것이지만 왜'dos2unix'가 아닌가? – aragaer

+1

Beacause 모든 배포판에는 기본적으로'dos2unix'가 설치되어 있지는 않습니다. – dstronczak

8

셸이 DOS/Windows 유사 줄 끝을 이해하지 못하고 CRLF 대신 LF를 예상하기 때문에 오류가 발생합니다.

먼저 유닉스 계열 라인 엔딩을 사용하도록 편집기를 구성하거나 dos2unix 명령을 사용하여 자동으로 변경해야합니다.

dos2unix ./NetworkUtility.sh 

자세한 내용은 '\r': command not found.

당신이 방랑을 사용하는 경우 확인 : Windows CRLF to Unix LF Issues in Vagrant ++ (테스트) 끝 라인 스크립트가 메모장, 메모장과 같은 몇 가지 편집기를 사용하여 창에 기록 된 (EOL) 변환 문제의

11

.

Sed, tr는 스크립트를 실행해야하는 경우 문제를 해결할 수 있지만 쉘 스크립트를 개발할 때는 매번 sed/tr 명령을 사용하여 변환 할 때마다 성가 시게됩니다. 그런 다음 스크립트를 실행하십시오.

메모장 ++에는 END OF LINE CONVERSION (EOL)을 변환 할 수있는 옵션이 있습니다. 는 작업을 수행하는 방법 : , 유닉스/OSX 여기

당신이 이동을 선택 편집> EOL 변환>로 이동 스크립트 파일을 저장하고 실행합니다.

Here is screenshot of the same