rares_dumitrescu
asked on
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 ? :|
while [ $h -eq 0 ]; do
if echo "$host" | egrep -e '^[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 ? :|
ASKER
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
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
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
while [ $h -eq 0 ]; do
if echo "$host" | egrep -e '^[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
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
while [ $h -eq 0 ]; do
read host
echo $host | egrep -e '^[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
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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 :)
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 :)
[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 "
[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(
ASKER
thanx mr ozo
while [ $h -eq 0 ]; do
if echo "$host" | egrep -e '^[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