BASH - script problem

h=0
while [ $h -eq 0 ]; do
if echo "$host" | egrep -e '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$';
then
IFS='.'
arr=($host)
if [ ${arr[0]} -le 255 -a ${arr[1]} -le 255 -a ${arr[2]} -le 255 -a ${arr[3]} -le 255 ];
then
if [ ${arr[0]:0:1} !-eq 0 ] || [ ${arr[1]:0:1} !-eq 0 ] || [ ${arr[2]:0:1} !-eq 0 ]; then
h=1
IFS=''
fi
else
echo "Error: The maximum number you can write is 255, try again."
read host
fi
else
echo "Error: You MUST use only digits from 1 to 5, and the ip must be like xxx.xxx.xxx.xxx, try again."
read host
fi
done

Any ideea whats wrong in this ?
Should i put IFP='' after each else or something ? :|
rares_dumitrescuAsked:
Who is Participating?
 
ozoCommented:
the first test could also have been
  if echo "$host" | egrep -e '^[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}$';
but that does not show whats wrong in the original script
0
 
ozoCommented:
h=0
while [ $h -eq 0 ]; do
  if echo "$host" | egrep -e '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$';
  then
    IFS='.'
    arr=($host)
    if [ ${arr[0]} -le 255 -a ${arr[1]} -le 255 -a ${arr[2]} -le 255 -a ${arr[3]} -le 255 ];
    then
      if [ ! ${arr[0]:0:1} -eq 0 ] || [ ${arr[1]:0:1} -ne  0 ] || [ ! ${arr[2]:0:1} -eq 0 ]; then
        h=1
        IFS=''
      fi
    else
      echo "Error: The maximum number you can write is 255, try again."
      read host
    fi
  else
    echo "Error: You MUST use only digits from 1 to 5, and the ip must be like xxx.xxx.xxx.xxx, try again."
    read host
  fi
done
0
 
rares_dumitrescuAuthor Commented:
it works if i put: 123.0.123.123
any sugestions ? i want to check if the ip typed is like: xxx.xxx.xxx.xxx (x, xx, or xxx) and if the first number of every xxx isn't 0

Example: 12.237.2.124 -> correct
                73.02.21.14 -> incorrect
                84.14.013.23 -> incorrect

did you get the ideea?
thanx
0
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

 
ozoCommented:
h=0
while [ $h -eq 0 ]; do
  if echo "$host" | egrep -e '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$';
  then
    IFS='.'
    arr=($host)
    if [ ${arr[0]} -le 255 -a ${arr[1]} -le 255 -a ${arr[2]} -le 255 -a ${arr[3]} -le 255 ]
    then
      if [ ${arr[0]:0:1} -ne 0 -a ${arr[1]:0:1} -ne  0 -a ${arr[2]:0:1} -ne 0 ] ; then
        h=1
        IFS=''
      else
        echo "Error: The first digit cannot be 0, try again"
        read host
      fi
    else
      echo "Error: The maximum number you can write is 255, try again."
      read host
    fi
  else
    echo "Error: You MUST use only digits from 1 to 5, and the ip must be like xxx.xxx.xxx.xxx, try again."
    read host

fi
done
0
 
nixfreakCommented:
h=0
while [ $h -eq 0 ]; do
        read host
        echo $host | egrep -e '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' >
/dev/null
        if [ "$?" -ne 0 ] ; then
                echo "Error: The ip must be like xxx.xxx.xxx.xxx, try again."
                continue
        else
                IFS='.'
                arr=($host)
                for i in 0 1 2 3 ; do
                        if [ ${arr[i]} -gt 255 ] ; then
                                echo "Error: The maximum number you can write is 255, try again"
                                continue 2
                        fi
                        echo ${arr[i]} | egrep "0[0-9]+" > /dev/null
                        if [ "$?" -eq 0 ] ; then
                                echo "Error: The first digit cannot be 0, try again"
                                continue 2
                        fi
                done
        fi
        h=1 ; echo "IP accepted!"
done
0
 
nixfreakCommented:
Typo.

h=0
while [ $h -eq 0 ]; do
        read host
        echo $host | egrep -e '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' > /dev/null
        if [ "$?" -ne 0 ] ; then
                echo "Error: The ip must be like xxx.xxx.xxx.xxx, try again."
                continue
        else
                IFS='.'
                arr=($host)
                for i in 0 1 2 3 ; do
                        if [ ${arr[i]} -gt 255 ] ; then
                                echo "Error: The maximum number you can write is 255, try again"
                                continue 2
                        fi
                        echo ${arr[i]} | egrep "0[0-9]+" > /dev/null
                        if [ "$?" -eq 0 ] ; then
                                echo "Error: The first digit cannot be 0, try again"
                                continue 2
                        fi
                done
        fi
        h=1 ; echo "IP accepted!"
done       
0
 
rares_dumitrescuAuthor Commented:
yes ozo, finally, "if echo "$host" | egrep -e '^[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}$';"

please, if you can explain what [1-9][0-9]{0,2} or [1-9]{1,3} means, so i can learn, maybe i will need it again sometime.

thanx a lot, and have a HAPPY EASTER :)
0
 
ozoCommented:
[1-9] means any character fron '1' to '9'
[1-9]{1,3} means any character fron '1' to '9' between 1 and 3 times
][0-9]{0,2} means any character fron '0' to '9' between 0 and 2 times
perl -MYAPE::Regex::Explain -e "print YAPE::Regex::Explain->new('^[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}\.[1-9][0-9]{0,2}$')->explain"
0
 
rares_dumitrescuAuthor Commented:
thanx mr ozo
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.