IP 주소를 확인하기 위해 여기에서 bash 스크립트를 찾았습니다. http://www.linuxjournal.com/content/validating-ip-address-bash-script
실행하려고 하면 오류가 발생합니다.
test.sh: line 22: syntax error: unexpected "(" (expecting "fi")
22번째 줄은 다음과 같습니다.
ip=($ip)
질문
- 이 줄은 목록이나 배열을 만들어야 합니까?
나는 두 가지 다른 쉘을 시도했지만 둘 다 작동하지 않습니다. 시험을 마친:
#!/bin/bash
그리고
#!/bin/sh
어떤 제안이라도 대단히 감사하겠습니다.
답변1
저것:
test.sh: line 22: syntax error: unexpected "(" (expecting "fi")
bash
보고된 오류 메시지 가 아닙니다 . Almquist 쉘 및 그 파생물(예: dash
busybox)은 sh
다음을 보고합니다.
$ grep -z '(expecting' /bin/dash
%s unexpected (expecting %s)
ash
쉘이 배열을 지원하지 않는다는 사실을 기반으로 이 스크립트는 she-bang에 표시된 bash
대로 작동합니다(3.2 이상). 비록 4차 IPv4 주소를 확인하는 것처럼 , 및 구문을 혼합한 #!/bin/bash
것처럼 보이지만 . , 그 중 일부는 소수점 3자리로 제한됩니다(예: 에서는 약간의 오류가 발생합니다).bash
zsh
ksh93
bash
008.008.008.008
및 둘 다에서 인식되는 표준 POSIX 구문을 사용하면 sh
다음을 수행할 수 있습니다.dash
bash
valid_ip() (
IFS=.
set -o noglob
set -- $1''
[ "$#" -eq 4 ] || exit
for i do
case $i in
("" | *[!0-9]*) exit 1;;
esac
[ "$i" -le 255 ] || exit
done
)
답변2
이것은 작동합니다:
#!/bin/bash
ip=127.0.0.1
ip=($ip)
printf 'The first IP number is "%s"\n' "${ip[0]}"
에서 이 명령을 실행하면 bash
스크립트에 다른 명령문 관련 오류가 있습니다 if
. /bin/sh
아래에서 실행하면~해야 한다sh
배열을 이해하지 못하여 실패합니다.
ShellCheck를 통해 스크립트를 실행하는 것이 좋습니다.https://www.shellcheck.net/
답변3
1) 이 줄은 목록이나 배열을 만들어야 합니까?
배열을 만드는 중입니다. 먼저 IFS를 로 설정한 .
다음 ip=($ip)를 표시합니다. 따라서 ip=10.11.12.13
배열이 ip=([0]=10 [1]=11 [2]=12 [3]=13)
그렇다면 각 옥텟이 256보다 작은지 확인하는 작업이 진행됩니다.
2) 이를 위해 어떤 쉘을 사용해야합니까?
이 스크립트는 확실히 bash용으로 생성되었으므로 bash에서 실행해야 합니다.
삼) 내 문제가 뭐야?
문제는 어떤 방식으로든 스크립트를 수정하여 구문 오류가 발생했다는 것입니다. 실행 중인 전체 스크립트를 정확하게 게시해 주시면 저희가 알아낼 수 있도록 노력하겠습니다. 그리고 댓글에서 말했듯이 스크립트 이름을 valid_ip.sh
. 그렇게 하지 않으면 오류가 발생하지 않지만 스크립트가 작동하지 않게 됩니다.