Aquí está mi código:

#!/bin/bash
if [ "$#" -ne 2 ] ; then
        echo "$0: exactly 2 arguments expected"
        exit 3
fi

if [$1 != "file" -a $1 != 'dir'] ; then
        echo "$0: first argument must be string "file" or "dir""
        exit 1
elif [-e $2 -a -r $2]; then
        if ["$1" = "file" -a -f $2] ; then
                echo YES
        elif ["$1" = "dir" -a -d $2] ; then
                echo YES
        else
                echo NO
        fi
        exit 0
else
        echo "$0: $2 is not a readable entry"
        exit 2
fi

Si me quedo ./lab4 file filename1 se compruebe si el primer parámetro es la cadena «archivo» o «dir», a continuación, si el primer parámetro es «archivo» y filename1 es un archivo, se imprimirá sí. Lo mismo con la dir.

No reconocer $1 y $2. El código de salida:

./lab04Q2: line 7: [file: command not found
./lab04Q2: line 10: [-e: command not found

aunque me puso 2 parámetros cuando se ejecuta el programa.

  • Hola Janson, he editado tu pregunta para usted. En el futuro, considere el uso de un 4 sangría de espacio en algo que debe ser tratado como code en sus puestos de trabajo aquí.
  • gracias pensé guión implicaba el uso de la ficha, pero que no funciona
InformationsquelleAutor JA3N | 2012-02-13

2 Comentarios

  1. 52

    Tratar los siguientes 3 líneas en bash:

    if [ "a" == "a" ]; then echo hi; fi
    if ["a" == "a" ]; then echo hi; fi
    if ["a" == "a"]; then echo hi; fi

    Verás que sólo el primero funciona, mientras que los otros dos no. es decir, es su falta de espacios es la razón por la que su expresión no funciona.

    El ejemplo anterior también sugiere que usted puede probar la sintaxis de bash directamente en el prompt de bash. Usted puede conseguir justo antes de su incorporación en la secuencia de comandos.

    • wth… puedo comprar la cerveza? lol…
    • He utilizado su enfoque y no funcionó este no funciona en un caso: si [ «a»==»a» ]; then echo hola; fi Sin espacios entre los valores y signos de igual
  2. 23

    El problema(s) provienen del hecho de que [ es en realidad un comando. De hecho, es un alias para el test comando. En orden para que esto se ejecute correctamente, usted necesitará agregar un espacio después de su [ como en:

    if [ $1 != "file" -a $1 != 'dir' ] ;

    Hacer esto para todas las instancias de [ que no tienen un espacio después.

    P. S.

    Ya que usted está utilizando bash como su intérprete, le sugiero que utilice [[ ]] en lugar de [ ] para las pruebas ya que la primera es mucho más capaz que el último sin inconvenientes; no hay necesidad de un espacio es uno de ellos

    • Y con eso … mi tarea es hacer.. Gracias por tu ayuda.
    • como si [[$1 != «archivo» -a $1 != ‘dir’ ]] ; ?
    • permite más C-la sintaxis de lo que realmente puede hacer if [[$1 != "file" && $1 != "dir"]]; then ...

Dejar respuesta

Please enter your comment!
Please enter your name here