Pregunta

/! 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'

En primer lugar, si la condición no se ejecutará, im supongo que es debido a la oferta inadecuada, pero no puedo entenderlo.

Gracias de antemano por cualquier ayuda.

¿Fue útil?

Solución

Si estás usando Bash, lo recomiendo $(...) en lugar de copias de las cotizaciones. ¿Qué mensajes de error se puede conseguir? Mi conjetura es que la opción -F"," a awk no está siendo citado correctamente. Tratando de insertar \ para escapar de las comillas.

Otros consejos

También puede utilizar comillas simples alrededor del argumento de la opción -F y cuando tenga alrededor de otros argumentos:

if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then

Es mucho más fácil escribir su examen si usted lo envuelve en una función:

mytest()
{
  echo "$1 $2" \
  | awk -F"," -v arg3="$3" '{print arg3}' \
  | awk -F" " -v arg1="$1" '{print arg1}' \
  | sed '/^$/d'
}

De esta manera, se puede comprobar que funciona correctamente. Una vez que ganó esta confianza

if [ "$(mytest "$desc" "$status")" != "OK" ]; then
        echo "howdy doody"
fi

o

if mytest "$desc" "$status" | grep -q -v '^OK$'; then
  echo "howdy doody"
fi

A primera vista, es posible que desee para tratar de escapar de algunas de las comillas dobles:

   if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
        echo "howdy dody"
   fi

a

   if [ "`echo $desc $status | awk -F\",\" '{print $3}' | awk -F\" \" '{print $1}' | sed '/^$/d'`" != "OK" ]; then
        echo "howdy doody"
   fi

Escapar de las comillas dobles es ciertamente una buena idea, pero parece que los $ 3 y $ 1 están destinados a ser interpretados por awk. Ellos están siendo interpretados por la shell en su lugar. Es posible que desee escapar de los '$' s. (Es posible que usted tiene valores significativos para $ 1 y $ 3 en la cáscara, pero no es probable.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top