Reputation: 61
In my program I need to validate user input getting by "read" in shell script. It check user input has spaces and if validation fails we should give user a another chance to input again.
stringValidator() {
if [[ ${1} =~ " " ]]; then
echo Should not contain spaces
echo Enter Again!
read input
echo $2=$input
return $2
else
return $1
fi
}
echo "Enter below details"
echo -e "client-id :"
read clientId
stringValidator "$clientId" ${!clientId@}
Here I tried to do was send the variable name also into stringValidator() and reassign value to that name (here it is clientId).
But the problem is I can't return that variable from stringValidator(). I use many read inputs though I showed only one here. Therefore I need a separate function for validation.
If you have better way to do this please mention.
Upvotes: 0
Views: 1612
Reputation: 912
The statement "return" is not used like that, it's to send back an error code (numerical).
That code should do what you want though :
#!/bin/bash
echo "Enter below details"
while true; do
echo -n "client-id : "
read clientID
if [[ $clientID =~ " " ]]; then
echo "ClientID Should not contain spaces"
continue
else
break
fi
done
echo "do something else"
EDIT
To answer your comment, this code in ksh would do what you ask :
#!/bin/ksh
function stringValidator
{
typeset locVarName
typeset locVar
locVarName=$1
nameref locVar=$1
while true; do
if [[ $locVar =~ " " ]]; then
echo "$locVarName should not contain spaces"
echo -n "$locVarName : "
read locVar
continue
else
break
fi
done
}
echo "Enter below details"
echo -n "Client-ID : "
read clientId
stringValidator "clientId"
echo "Final value is $clientId"
echo "do something else"
Running would result to something like that :
Enter below details
Client-ID : test t
clientId should not contain spaces
clientId : tesgg
Final value is tesgg
do something else
Hope it helps !
Upvotes: 1
Reputation: 1
Separate Validation function from read input. Next, introduce it into a while loop to ask for enter input again up to a correct value. Use ECHO instead of RETURN to get the value from a function.
Upvotes: 0