Hi guys, I use this function which was provided to me by someone at this site. It works perfectly for validating a users input option against allowed options..
example:
validateInput "1" "1 3 4 5" would return 0 (success)
Code:
function validateInput {
input=$1
allowedInput=$2
for allowedOption in ${allowedInput}
do
if [ ${input} -eq ${allowedOption} ]
then
return 0
fi
done
return 1
}
but now we allow users to enter more than 1 number and so this validate needs to be improved
validateInput "16" "1 3 4 5" this should return fail (1) as 6 is not in the allowedInput string.. currently the function return success because "1" is in the allowedInput string.. but I somehow need it to verify all the numbers in the first parameter
Well, now you need to validate the number of arguments, and validate each one separately.
Code:
validateInputs(){
inputs=$1
allowedInput=$2
min_args=$3
max_args=$4
arg_ct=0
inval_args=""
for input in $inputs qzzq
do
if [ $input = qzzq ]
then
break
fi
for allowedOption in ${allowedInput}
do
if [ ${input} -eq ${allowedOption} ]
then
inval_args="$inval_args $input"
fi
done
(( $arg_ct += 1 ))
done
if [ "$inval_args" != "" ]
then
echo "Invalid:$inval_args" >/dev/tty
return 1
fi
if (( $arg_ct > $max_args || $arg_ct < $min_args ))
then
return 2
fi
return 0
}
validateInput "16" "1 3 4 5" this should return fail (1) as 6 is not in the allowedInput string.. currently the function return success because "1" is in the allowedInput string.. but I somehow need it to verify all the numbers in the first parameter
Code:
$
$
$ cat -n f38
1 #!/usr/bin/bash
2 x=$1
3 y=$2
4 i=0
5 while [ $i -lt ${#x} ]; do
6 d=${x:$i:1}
7 if ! [[ " $y " =~ " $d " ]]
8 then
9 echo "$d does not exist in $y"
10 return 1
11 fi
12 i=`expr $i + 1`
13 done
14 echo "$x exists in $y"
15 return 0
$
$
$ . f38 "1" "1 2 3 4"
1 exists in 1 2 3 4
$
$
$ . f38 "123" "1 2 3 4"
123 exists in 1 2 3 4
$
$
$ . f38 "0123" "1 2 3 4"
0 does not exist in 1 2 3 4
$
$
$ . f38 "1236" "1 2 3 4"
6 does not exist in 1 2 3 4
$
$
$ . f38 "1237" "1 2 3 77 4"
7 does not exist in 1 2 3 77 4
$
$
You want to be able to validate any word in a space delimited list, not every byte, right?
You might change your input validation to a case string, somewhat more varsatile with | (or), [abc] (list of char) and such:
Code:
#!/usr/bin/ksh
valInp(){
for i in $1 qzzq
do
bad_args=""
case "$i" in
(qzzq)
;;
($2)
;;
(*)
bad_args="$bad_args $i"
;;
esac
done
if [ "$bad_args" != "" ]
then
return 1
fi
}
Using a grep -E regex-pattern would be even more powerful.
Code:
#!/usr/bin/ksh
valInp(){
bad_args=""
echo $1 | tr ' ' '\12' | grep -Ev "$2" | while read bad
do
bad_args="$bad_args $bad"
done
if [ "$bad_args" != "" ]
then
return 1
fi
}
Last edited by DGPickett; 10-28-2010 at 05:18 PM..
Gents,
I did the below code to get an output (report) ,.. the code works fine but I believe it can be more shorted using better method.
Please if you can help, to generate same output improving the code , will be great.
here my code.
# get diff in time
awk '{$9=$8-prev8;prev8=$8;print... (8 Replies)
Thank you for taking the time to look at this and provide input.
To start, I am not a linux/unix expert but I muddle through the best I can.
I am also in no way shape or form a programmer. Please keep that in mind as you read this script.
This script is designed to find all files in a given... (8 Replies)
I'm obviously very new to this. I'm trying to write a simple for loop that will read the directory names in /Users and then copy a file into the same subdir in each user directory.
I have this, and it works but it isn't great.
#!/bin/bash
HOMEDIRS=/Users/*
for dirs in $HOMEDIRS; do
if ];... (5 Replies)
I have the following code, and I am changing it to
#!/bin/bash
hasArgumentCModInfile=0
hasArgumentSrcsInfile=0
hasArgumentRcvsInfile=0
OLDIFS="$IFS"
IFS="|=" # IFS controls splitting. Split on "|" and "=", not whitespace.
set -- $* # Set the positional... (3 Replies)
Hi;
I want to access our customer database to retreive all clients that have as language index 2 or 3 and take their client number.
My input is a file containing all client numbers.
i access the data base using a function call "scpshow". The total number of clients i want to scan is 400 000... (6 Replies)