Me gustaría comprobar si ambos archivos existen, pero estoy recibiendo

test.sh: line 3: [: missing `]'

Nadie puede ver lo que está mal?

#!/bin/sh

if [ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]; then
   echo "both exist"
else
   echo "one or more is missing"
fi
  • Si el uso de ‘prueba’ en lugar de ‘[‘, el problema es más evidente. «si la prueba -f .ssh/id_rsa && prueba -f .ssh/ir_rsa.pub; a continuación,» funciona bien.

4 Comentarios

  1. 50

    Trate de añadir un adicional de corchete.

    if [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]]; then
    • Se trata específicamente de [[ (sin espacios) y no [ [ (con espacios). Por la razón que sea, cuando vi esta respuesta, yo pensaba que los espacios estaban bien, pero no lo son!
  2. 30
    [ -f .ssh/id_rsa -a -f .ssh/id_rsa.pub ] && echo both || echo not

    o

    [[ -f .ssh/id_rsa && -f .ssh/id_rsa.pub ]] && echo both || echo not

    también, si por el [[ ]] solución, es probable que desee para cambiar #!/bin/sh a #!/bin/bash en cumplimiento con su pregunta de la etiqueta.

    • [[ ]] también apoyado por ksh, zsh y probablemente otros shells. Pero el mejor uso #!/bin/bash de #!/bin/sh.
    • sí, yo sólo estaba tratando de restringir mi respuesta para el conjunto de los depósitos mencionados en la pregunta uno, en las etiquetas, y el otro en el proceso de la línea.
    • Sí, tu respuesta es perfecta (a corto y correcta). No fue sólo falta un comentario para señalar algunos cáscara de cumplimiento. Pero este detalle no tiene que estar en su respuesta, sólo en un pequeño comentario abajo 😉 Saludos
    • no poner ninguna reclamación en la perfección, pero el último comentario, acerca de acompañamiento bashisms con el correspondiente proceso de la línea fue mi intento de cubrir algunos cáscara de cumplimiento. Seguro, la ampliación a otros conchas de ninguna manera afectaría la respuesta y es un comentario útil.
  3. 12

    [[ es bash-sintaxis específica. Para compatible con POSIX conchas, usted necesita:

    [ -f file1 ] && [ -f file2 ]
  4. 7
    if [ -e .ssh/id_rsa -a -e .ssh/id_rsa.pub ]; then
     echo "both exist"
    else
     echo "one or more is missing"
    fi

    Aquí,

    -e sólo compruebe el archivo se sale o no.Si sale,es devolver true.otra cosa,se devuelve false.

    -f también hacen lo mismo, pero,es comprobar si el archivo es un archivo o no.basado en que el retorno de verdadero/falso.

    Entonces usted está usando &&.De modo que,Se necesitan dos [[ .. ]] soportes para ejecutar.

    lugar usted puede usar la opción-a [mismo como && operador] -s [mismo como el operador||].
    Si necesita más información, vaya a través de este enlace

    http://linux.die.net/man/1/bash.

Dejar respuesta

Please enter your comment!
Please enter your name here