<Anterior | Contenido | Siguiente>
Expresiones de archivo
Las siguientes expresiones se utilizan para evaluar el estado de los archivos:
Tabla 27-1: Expresiones de archivo de prueba
La expresión es verdadera si:
La expresión es verdadera si:
file1 -ef file2 file1 y file2 tienen los mismos números de inodo (los dos
Los nombres de archivo se refieren al mismo archivo mediante enlaces físicos).
file1 -Nuevo Testamento file2 file1 es más reciente que file2.
file1 -Antiguo Testamento file2 file1 es más antiguo que file2.
-b presentar presentar existe y es un archivo de bloque especial (dispositivo).
-c presentar presentar existe y es un archivo de carácter especial (dispositivo).
-d presentar presentar existe y es un directorio.
-e presentar presentar existe.
-f presentar presentar existe y es un archivo normal.
-g presentar presentar existe y es set-group-ID.
-G presentar presentar existe y es propiedad del ID de grupo efectivo.
-k presentar presentar existe y tiene su "bit pegajoso" configurado.
-L presentar presentar existe y es un vínculo simbólico.
-O presentar presentar existe y es propiedad del ID de usuario efectivo.
-p presentar presentar existe y es una tubería con nombre.
-r presentar presentar existe y es legible (tiene permiso de lectura para el usuario efectivo).
-s presentar presentar existe y tiene una longitud mayor que cero.
-S presentar presentar existe y es un enchufe de red.
-t fd fd es un descriptor de archivo dirigido hacia / desde la terminal. Esto se puede utilizar para determinar si se está redirigiendo la entrada / salida / error estándar.
-u presentar presentar existe y es setuid.
-w presentar presentar existe y se puede escribir (tiene permiso de escritura para el usuario efectivo).
-x presentar presentar existe y es ejecutable (tiene permiso de ejecución / búsqueda para el usuario efectivo).
Aquí tenemos un script que demuestra algunas de las expresiones del archivo:
#! / Bin / bash
# test-file: evalúa el estado de un archivo FILE = ~ / .bashrc
if [-e "$ FILE"]; luego
if [-f "$ FILE"]; luego
echo "$ FILE es un archivo normal".
fi
if [-d "$ FILE"]; luego
echo "$ FILE es un directorio".
fi
if [-r "$ FILE"]; luego
echo "$ FILE es legible".
fi
if [-w "$ FILE"]; luego
echo "$ FILE se puede escribir".
fi
if [-x "$ FILE"]; luego
echo "$ FILE es ejecutable / buscable".
#! / Bin / bash
# test-file: evalúa el estado de un archivo FILE = ~ / .bashrc
if [-e "$ FILE"]; luego
if [-f "$ FILE"]; luego
echo "$ FILE es un archivo normal".
fi
if [-d "$ FILE"]; luego
echo "$ FILE es un directorio".
fi
if [-r "$ FILE"]; luego
echo "$ FILE es legible".
fi
if [-w "$ FILE"]; luego
echo "$ FILE se puede escribir".
fi
if [-x "$ FILE"]; luego
echo "$ FILE es ejecutable / buscable".
fi más
echo "$ FILE no existe" salida 1
fi
salida
fi más
echo "$ FILE no existe" salida 1
fi
salida
El script evalúa el archivo asignado a la constante ARCHIVO y muestra sus resultados a medida que se realiza la evaluación. Hay dos cosas interesantes a tener en cuenta sobre este guión. Primero, observe cómo el parámetro $ ARCHIVO se cita dentro de las expresiones. Esto no es necesario para completar sintácticamente la expresión, sino que es una defensa contra que el parámetro esté vacío. Si la expansión de parámetros de $ ARCHIVO si resultara en un valor vacío, causaría un error (los operadores se interpretarían como cadenas no nulas en lugar de operadores). El uso de comillas alrededor del parámetro garantiza que el operador siempre esté seguido por una cadena, incluso si la cadena está vacía. En segundo lugar, observe la presencia del salida comando cerca del final del guión. los salida El comando acepta un único argumento opcional, que se convierte en el estado de salida del script. Cuando no se pasa ningún argumento, el estado de salida cambia por defecto al estado de salida del último comando ejecutado. Utilizando salida de esta manera permite que el script indique falla si $ ARCHIVO se expande al nombre de un archivo inexistente. los salida El comando que aparece en la última línea del script es una formalidad. Cuando un script “se ejecuta hasta el final” (llega al final del archivo), termina con un estado de salida del último comando ejecutado.
De manera similar, las funciones de shell pueden devolver un estado de salida al incluir un argumento entero al volvemos mando. Si tuviéramos que convertir el script anterior en una función de shell para incluirlo en un programa más grande, podríamos reemplazar el salida comandos con volvemos declaraciones y obtener el comportamiento deseado:
archivo_prueba () {
# test-file: evalúa el estado de un archivo FILE = ~ / .bashrc
if [-e "$ FILE"]; luego
if [-f "$ FILE"]; luego
echo "$ FILE es un archivo normal".
fi
if [-d "$ FILE"]; luego
echo "$ FILE es un directorio".
fi
if [-r "$ FILE"]; luego
archivo_prueba () {
# test-file: evalúa el estado de un archivo FILE = ~ / .bashrc
if [-e "$ FILE"]; luego
if [-f "$ FILE"]; luego
echo "$ FILE es un archivo normal".
fi
if [-d "$ FILE"]; luego
echo "$ FILE es un directorio".
fi
if [-r "$ FILE"]; luego
echo "$ FILE es legible".
fi
if [-w "$ FILE"]; luego
echo "$ FILE se puede escribir".
fi
if [-x "$ FILE"]; luego
echo "$ FILE es ejecutable / buscable".
fi
más
echo "$ FILE no existe" return 1
fi
}
echo "$ FILE es legible".
fi
if [-w "$ FILE"]; luego
echo "$ FILE se puede escribir".
fi
if [-x "$ FILE"]; luego
echo "$ FILE es ejecutable / buscable".
fi
más
echo "$ FILE no existe" return 1
fi
}