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.
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 !