Primeiro de tudo, porque você usou grep
com -q
argumento, o valor da variável def
sempre será igual a uma string vazia. De man grep
:
Segundo , você deve pensar um pouco na lógica. Esta expressão:
$prmt != "y" || $prmt != "n"
está sempre em qualquer linguagem de programação avaliada como true :
- se
$prmt = "y"
, então com certeza$prmt != "n"
, então sua expressão é true - se
$prmt = "n"
, então com certeza$prmt != "y"
, então sua expressão é true - em outros casos, é claro que sua expressão é verdadeira.
Terceiro , sua função deve se parecer com:
firstFunction() {
abc="$USER content"
def='grep -is $USER /path/to/file'
if [[ $def = "$abc" ]]; then
secondFunction
return #does not make sense to go ahead
else
echo "Message to user with a y/n prompt"
read prmt
fi
while : ; do
if [ "$prmt" = "n" ]; then
secondFunction
return #does not make sense to go ahead
elif [ "$prmt" = "y" ]; then
sed -i "s/$def/$abc/g" /path/to/file
return #does not make sense to go ahead
else
echo "Message to user with a y/n prompt"
read prmt
fi
done
}
Ou, como você disse, você pode usar a declaração case
.
Veja também: