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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top