Tutoriales

Cómo demostrar si el archivo no existe en Bash

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
DifficultyEasy (rss)
Root privilegesNo
RequirementsBash on Linux/Unix/macOS
Time2m



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:

  1. -f nombre de archivo (prueba -f nombre de archivo) devuelve efectivo si el archivo existe y es un archivo ordinario.
  2. 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:

  1. EXPR1 y EXPR2 Devuelve efectivo si EXPR1 Y EXPR2 son verdaderos.
  2. 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

Tabla 1: archivo de comando de prueba y repertorio de otros operadores
CirujanoDevoluciones
-un archivoDefinitivo si el archivo existe.
-b ARCHIVODefinitivo si el archivo es específico de coalición.
-c ARCHIVODefinitivo si el archivo es de carácter específico.
-d ARCHIVODefinitivo si el archivo es un directorio.
-e ARCHIVODefinitivo si el archivo existe.
-f ARCHIVODefinitivo si el archivo existe y es un archivo ordinario.
-g ARCHIVODefinitivo si el archivo es set-group-id.
-h ARCHIVODefinitivo si el archivo es un enlace simbólico.
-L ARCHIVODefinitivo si el archivo es un enlace simbólico.
-k ARCHIVODefinitivo si el archivo tiene su bit «pegajoso» establecido.
-p ARCHIVODefinitivo si el archivo es una tubería con nombre.
-r ARCHIVODefinitivo si usted puede interpretar el archivo.
-s ARCHIVODefinitivo si el archivo existe y no está hueco.
-S ARCHIVODefinitivo si el archivo es un socket.
-t FDDefinitivo si FD se abre en un terminal.
-u ARCHIVODefinitivo si el archivo es set-user-id.
-w ARCHIVODefinitivo si usted puede escribir en el archivo.
-x ARCHIVODefinitivo si el archivo es ejecutable por usted.
-O ARCHIVODefinitivo si el archivo es de su propiedad.
-G ARCHIVODefinitivo si el archivo pertenece efectivamente a su agrupación.
-N ARCHIVODefinitivo si el archivo se ha modificado desde la última repaso.
! EXPRInductivo no.
EXPR1 y EXPR2Realizar la y operación.
EXPR1 || EXPR2Realizar 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



Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba