'Shell'에 해당되는 글 1건
- 2018.04.01 validate ip address in bash
validate ip address in bash
Linux의 bash shell script을 작성하는데, ip addresss를 입력받는 부분을 작성 중이다.
입력 받은 주소의 적합성을 검사하려고 하는데, 생각보다 간단하지 않았다.
최종 완성된 코드를 올리니, 참고하시라... (귀찮아서 설명을 하지 않음을 이해해 주세요)
#!/bin/bash function is_number() { local src=$1 local stat=1 tdst=`expr $src + 1` 2> /dev/null stat=$? return $stat } function validate_ip() { local lip=$1 local stat=255 local renumexp='^[0-9]+$' if [[ $lip != ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then OIFS=$IFS IFS='.' sip=($lip) IFS=$OIFS printf "0: %s\n" ${sip[0]} printf "1: %s\n" ${sip[1]} printf "2: %s\n" ${sip[2]} printf "3: %s\n" ${sip[3]} stat=0 vip=${sip[0]} if [ $stat -eq 0 ] ; then is_number $vip 2> /dev/null if [ $? -eq 0 ] ; then if [[ $vip -gt 255 ]] ; then stat=1 fi else # not number stat=11 fi fi vip=${sip[1]} if [ $stat -eq 0 ] ; then is_number $vip 2> /dev/null if [ $? -eq 0 ] ; then if [[ $vip -gt 255 ]] ; then stat=2 fi else # not number stat=12 fi fi vip=${sip[2]} if [ $stat -eq 0 ] ; then is_number $vip 2> /dev/null if [ $? -eq 0 ] ; then if [[ $vip -gt 255 ]] ; then stat=3 fi else # not number stat=13 fi fi vip=${sip[3]} if [ $stat -eq 0 ] ; then is_number $vip 2> /dev/null if [ $? -eq 0 ] ; then if [[ $vip -gt 255 ]] ; then stat=4 fi else # not number stat=14 fi fi fi return $stat } read ip if validate_ip $ip; then echo "success ($ip)" exit 0 else echo "fail ($ip)" exit 1 fi |
참고 사이트는
1. validate ip
https://unix.stackexchange.com/questions/111841/regular-expression-in-bash-to-validate-ip-address
https://stackoverflow.com/questions/13777387/check-for-ip-validity
2. check number
https://stackoverflow.com/questions/806906/how-do-i-test-if-a-variable-is-a-number-in-bash
https://www.unix.com/shell-programming-and-scripting/21668-how-check-whether-string-number-not.html
이다.