Creative Saplings

Come controllare correttamente se il file esiste in Bash o Shell (con esempi)

Febbraio 13, 2021
No Comments

Sommario

In questo tutorial tratterò diversi attributi che puoi usare in bash o shell scripting per controllare file e directory. Puoi utilizzare espressioni condizionali bash con ] o utilizzare test con per verificare se il file esiste.

Lo faremo stai usando l’operatore bash if e else per tutti gli esempi, quindi ti consiglio di leggere: Bash if else guida all’uso per principianti assoluti

1. Bash / Shell: controlla se il file esiste ed è un file normale

Questa sezione mostra gli esempi per verificare se esiste un file regolare in bash.

1.1: Metodo-1: utilizzo di parentesi singole o doppie

utilizzo di parentesi doppie ]

#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

Utilizzo di parentesi singole

#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

1.2: Metodo 2: utilizzo del comando di prova

test Il comando viene utilizzato per controllare i tipi di file e confrontare valori.

#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi

1.3: Metodo 3: riga singola

In questo esempio possiamo utilizzare parentesi singole o doppie. Suggerirei sempre di utilizzare le doppie parentesi quadre quando si scrive un codice di linea nella shell in quanto riduce al minimo il rischio di ricevere avvisi sulla console quando si verifica la divisione delle parole.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"

L’istruzione dopo && verrà eseguita se SUCCESS. Se la prima condizione restituisce FALSE, verrà eseguita l’istruzione con ||.

Allo stesso modo, utilizzando il comando test per verificare se esiste un file regolare in bash o uno script di shell in una singola riga .

#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"

2. Bash / Shell: controlla se il file esiste (è vuoto o non è vuoto)

Per controllare se il file esiste e se è vuoto o ha del contenuto, utilizziamo l’attributo “-s”

2.1: Metodo-1: utilizzo di parentesi singole o doppie

Controlla se il file esiste e vuoto o non vuoto utilizzando le doppie parentesi graffe ]

#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

Controlla se il file esiste e vuoto o non vuoto utilizzando le doppie parentesi graffe

if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

2.2: Metodo 2: utilizzo del comando di prova

Utilizzando il comando di prova combiniamo l’attributo -s per verificare se il file esiste ed è vuoto o ha del contenuto:

2.3: Metodo 3: riga singola

Possiamo usare parentesi sia doppie che singole per tale riga ma, come ho detto prima, consiglierei di usare parentesi doppie.

#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

Allo stesso modo con il comando di prova possiamo utilizzare && e || operatore per controllare il file nel comando a riga singola all’interno del nostro script di shell.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

3. Bash / Shell: controlla se la directory esiste

Spero che tu sappia che in Linux tutto è un file. Quindi, in questo modo, anche una directory è considerata un file. Possiamo utilizzare l’attributo “-d” per verificare se esiste una directory nella programmazione della shell.

3.1: Metodo 1: utilizzo di parentesi doppie o singole

Possiamo utilizzare l’attributo -d all’interno di o doppie parentesi graffe ] per controllare se la directory esiste.

#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

Allo stesso modo in questo esempio utilizziamo singole parentesi per verificare se la directory è preimpostata nello script della shell.

#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.2: Metodo 2: utilizzo del comando test

In questo esempio useremo il comando test per assicurarci che la directory sia presente o meno prima di eseguire determinate attività.

#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.3: Metodo 3: riga singola

In questo esempio useremo parentesi singole e doppie in formato riga singola per controllare per la directory. L’istruzione dopo l’operatore && verrà eseguita se la prima condizione è TRUE e se è FALSE verrà eseguita l’istruzione || condition ” .

#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"

Suggerirei di utilizzare ] invece di per tali codici lineari nella programmazione della shell.

Allo stesso modo con && e || possiamo usare il comando test per controllare se la directory esiste

#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"

4. Bash / Shell: controlla se la directory esiste (vuota o non vuota)

Non ci sono attributi di shell come ho usato in tutti gli altri esempi e scenari in questo tutorial, ma abbiamo alcuni hack che possiamo usare per controllare se la directory è vuota o non vuota.

4.1: Metodo-1: Elenca il contenuto della directory e verifica

In questo esempio elencheremo il contenuto della directory, sopprimeremo l’output e quindi, in base al codice di uscita, controlliamo se la directory è vuota o ne contiene contenuto

#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi

Possiamo anche invertire questa situazione inserendo una condizione NOT (!). Quindi sarebbe simile a:

#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

L’output sarebbe lo stesso in entrambi gli script di esempio.

4.2: Metodo 2: utilizzo comando find

Possiamo usare il comando find e quindi sopprimere l’output per verificare se la directory di destinazione ha del contenuto o meno.

#!/bin/bashDIR="/tmp"if find -- "$DIR" -prune -type d -empty | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

4.3: Metodo 3: Elenca il contenuto

Ancora come ho detto poiché non esiste un modo semplice per verificare se una directory è vuota o non utilizza alcuni attributi, elencheremo il contenuto della directory. Se non ottieni alcun output, la directory è vuota oppure non è vuota

#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

5. Bash / Shell: elenco di attributi per il file di test

Allo stesso modo ci sono molti altri attributi che puoi usare con gli script della shell per controllare diversi tipi di file, come collegamenti simbolici, permessi dei file ecc.

Attributi Che cosa fa?
-a FILE Vero se FILE esiste
-b FILE Vero se FILE esiste ed è un file speciale a blocchi.
-c FILE True if FILE esiste ed è un file speciale di caratteri.
-d FILE Vero se FILE esiste ed è una directory.
Vero se FILE esiste
-f FILE Vero se FILE esiste ed è un file normale
-g FILE Vero se FILE esiste e il relativo bit set-group-id è impostato
-h FILE Vero se FILE esiste ed è un collegamento simbolico
-k FILE Vero se FILE esiste e il relativo bit “appiccicoso” è impostato
-p FILE Vero se FILE esiste ed è un named pipe (FIFO)
-r FILE True if FILE esiste ed è leggibile
-s FILE Vero se FILE esiste e ha una dimensione maggiore di zero
-u FILE Vero se FILE esiste e il relativo bit set-user-id è impostato
-w FILE Vero se FILE esiste ed è scrivibile
-x FILE Vero se FILE esiste ed è eseguibile
-G FILE Vero se FILE esiste ed è di proprietà dell’ID gruppo effettivo
-L FILE Vero se FILE esiste ed è un collegamento simbolico
-N FILE Vero se FILE esiste ed è stato modificato dall’ultima lettura
-o FILE Vero se FILE esiste ed è di proprietà dell’effettivo ID utente
-S FILE Vero se FILE esiste ed è un socket
Vero se FILE1 e FILE2 si riferiscono allo stesso dispositivo e numeri di inode
FILE1 -nt FILE2 Vero se FILE1 è più recente (in base alla data di modifica) di FILE2, o se FILE1 esiste e FILE2 sì non
FILE1 -ot FILE2 Vero se FILE1 è precedente di FILE2 o se FILE2 esiste e FILE1 no

Conclusione

Articles
Previous Post

Come dire che sei il benvenuto in francese

Next Post

Come configurare l'accesso remoto e connettersi a un'istanza remota di SQL Server con gli strumenti ApexSQL

Lascia un commento Annulla risposta

Articoli recenti

  • Best Photography Schools In The World, 2020
  • I cittadini sovrani portano la loro filosofia antigovernativa sulle strade
  • Guida ai costi di riparazione dello stucco
  • Muckrakers (Italiano)
  • Oncologia di precisione

Archivi

  • Febbraio 2021
  • Gennaio 2021
  • Dicembre 2020
  • Novembre 2020
  • Ottobre 2020
  • Settembre 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.