bourne shell guillemet simple, question doublequote & backquote
Question
/! Bin / sh
if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy dody"
fi
echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'
Tout d'abord, si condition ne fonctionne pas, im deviner c'est à cause de la citation incorrecte, mais je ne peux pas comprendre.
Merci d'avance pour toute aide.
La solution
Si vous utilisez Bash, je vous recommande $(...)
au lieu de apostrophes. Quels messages d'erreur que vous obtenez? Je suppose que l'option -F","
à awk n'est pas cité correctement. Essayer d'insérer \
pour échapper aux guillemets.
Autres conseils
Vous pouvez également utiliser des guillemets simples autour de l'argument de l'option de -F
que vous avez autour d'autres arguments:
if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then
Il est beaucoup plus facile d'écrire votre test si vous l'envelopper dans une fonction:
mytest()
{
echo "$1 $2" \
| awk -F"," -v arg3="$3" '{print arg3}' \
| awk -F" " -v arg1="$1" '{print arg1}' \
| sed '/^$/d'
}
De cette façon, vous pouvez vérifier que cela fonctionne correctement. Une fois que vous avez gagné cette confiance
if [ "$(mytest "$desc" "$status")" != "OK" ]; then
echo "howdy doody"
fi
ou
if mytest "$desc" "$status" | grep -q -v '^OK$'; then
echo "howdy doody"
fi
À première vue, vous pourriez vouloir essayer échapper quelques-unes des guillemets doubles:
if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy dody"
fi
à
if [ "`echo $desc $status | awk -F\",\" '{print $3}' | awk -F\" \" '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy doody"
fi
Échapper les guillemets doubles est certainement une bonne idée, mais il semble que les 3 $ et 1 $ sont destinés à être interprété par awk. Ils sont interprétés par votre shell à la place. Vous voulez sans doute échapper à la s « $ ». (Il est possible que vous ayez des valeurs significatives pour 1 $ et 3 $ dans la coquille, mais peu probable).