
H¿Cómo puedo comprobar si un archivo no existe en un script Bash?
Podemos aprender rápidamente si un archivo en serie no existe en Bash usando el comando de prueba o [ builtin. This page explains how to find a regular file under the Linux or Unix-like system using Bash.
Tutorial details | |
---|---|
Difficulty | Easy (rss) |
Root privileges | No |
Requirements | Bash on Linux/Unix/macOS |
Time | 2m |
Checking if file does not exist in Bash
The test command check file types and compare values. The basic syntax is as follows:
[ -f filename ] prueba Nombre del archivo [ ! -f filename ] ! prueba Nombre del archivo
Sintaxis
El comando de prueba siempre sale con un estado de 0 (efectivo) o 1 (infiel) dependiendo de la evaluación de EXPR. Por ejemplo:
- -f nombre de archivo (prueba -f nombre de archivo) devuelve efectivo si el archivo existe y es un archivo ordinario.
- los ! (signo de interjección) ejecutar como natural «NO«cirujano.
En otras palabras, podemos usar el comando if de la sucesivo modo:
if [ ! -f /path/to/file ] then echo "File does not exist in Bash" else echo "File found. Do something meaningful here" fi
Ejemplos de
#!/bin/bash src="/etc/host.ip.conf" if [ ! -f /etc/demo.txt ] then echo "File not found" fi # another syntax # [ ! -f "$src" ] && echo "$src file missing" || echo "$src file found and now copying ..."
A continuación, ejecute el script de shell del archivo .sh en Linux / UNIX:chmod +x script.sh
./script.sh
¿Cómo puedo aprender si dos archivos normales no existen en Bash?
A menudo, desea hacer poco si se encuentran varios archivos. Para este tipo de operación, usamos operadores booleanos:
- EXPR1 y EXPR2 Devuelve efectivo si EXPR1 Y EXPR2 son verdaderos.
- EXPR1 || EXPR1 El comando de prueba devuelve Definitivo si EXPR1 O EXPR1 es efectivo.
Por ejemplo:
#!/bin/bash # a list of required files f1="/etc/hosts" f2="/etc/resolv.conf" # # Die if $f1 or $f2 is missing # if [ ! -f "$f1" ] || [ ! -f "$f2" ] then echo "Required files are missing." else echo "Let us build SFTP jail." fi
Nómina de operadores de archivos
Cirujano | Devoluciones |
---|---|
-un archivo | Definitivo si el archivo existe. |
-b ARCHIVO | Definitivo si el archivo es específico de coalición. |
-c ARCHIVO | Definitivo si el archivo es de carácter específico. |
-d ARCHIVO | Definitivo si el archivo es un directorio. |
-e ARCHIVO | Definitivo si el archivo existe. |
-f ARCHIVO | Definitivo si el archivo existe y es un archivo ordinario. |
-g ARCHIVO | Definitivo si el archivo es set-group-id. |
-h ARCHIVO | Definitivo si el archivo es un enlace simbólico. |
-L ARCHIVO | Definitivo si el archivo es un enlace simbólico. |
-k ARCHIVO | Definitivo si el archivo tiene su bit «pegajoso» establecido. |
-p ARCHIVO | Definitivo si el archivo es una tubería con nombre. |
-r ARCHIVO | Definitivo si usted puede interpretar el archivo. |
-s ARCHIVO | Definitivo si el archivo existe y no está hueco. |
-S ARCHIVO | Definitivo si el archivo es un socket. |
-t FD | Definitivo si FD se abre en un terminal. |
-u ARCHIVO | Definitivo si el archivo es set-user-id. |
-w ARCHIVO | Definitivo si usted puede escribir en el archivo. |
-x ARCHIVO | Definitivo si el archivo es ejecutable por usted. |
-O ARCHIVO | Definitivo si el archivo es de su propiedad. |
-G ARCHIVO | Definitivo si el archivo pertenece efectivamente a su agrupación. |
-N ARCHIVO | Definitivo si el archivo se ha modificado desde la última repaso. |
! EXPR | Inductivo no. |
EXPR1 y EXPR2 | Realizar la y operación. |
EXPR1 || EXPR2 | Realizar la o operación. |
Bash incorporado vs prueba externa
Tenga en cuenta que el comando de prueba se proporciona como comandos integrados (internos) y externos. Entonces la sintaxis puede variar. Este ejemplo utiliza el comando incorporado de bash. Podemos demostrar que usando el comando de prueba o el comando de comando:type -a test
# /bin/test and /usr/bin/test are same (hardlinks) files #
stat /usr/bin/test /bin/test
# find default test command #
command -V test
Resumiendo
Aprendió a demostrar si un archivo no existe en el script Bash. Le recomiendo que lea el manual / documentación de GNU / BASH en término o atando el sucesivo comando man:man bash
help test # bulitin test help page
man test # external test man page