Solved

# BASH - script problem

Posted on 2007-04-07
299 Views
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."
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."
fi
done

Any ideea whats wrong in this ?
Should i put IFP='' after each else or something ? :|
0
Question by:rares_dumitrescu
• 4
• 3
• 2

LVL 84

Expert Comment

ID: 18869092
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."
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."
fi
done
0

Author Comment

ID: 18869134
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

LVL 84

Expert Comment

ID: 18870252
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"
fi
else
echo "Error: The maximum number you can write is 255, try again."
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."

fi
done
0

LVL 7

Expert Comment

ID: 18870368
h=0
while [ \$h -eq 0 ]; do
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

LVL 7

Assisted Solution

nixfreak earned 100 total points
ID: 18870374
Typo.

h=0
while [ \$h -eq 0 ]; do
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

LVL 84

Accepted Solution

ozo earned 400 total points
ID: 18870385
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

Author Comment

ID: 18872188
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

LVL 84

Expert Comment

ID: 18872665
[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

Author Comment

ID: 18872844
thanx mr ozo
0

## Join & Write a Comment Already a member? Login.

### Suggested Solutions

Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

#### 705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

#### Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!