2012-01-08 19 views
5

Lo script di bash breve in basso elenca tutti i file e le directory in una determinata directory e il relativo sotto. Cosa significa lo $1/* nello script? Per favore datemi dei riferimenti a riguardo. Grazie

#!/bin/sh 

list_alldir(){ 
    for file in $1/* 
    do 
     if [ -d $file ]; then 
      echo $file 
      list_alldir $file 
     else 
      echo $file 
     fi 
    done 
} 

if [ $# -gt 0 ]; then 
    list_alldir "$1" 
else 
    list_alldir "." 
fi 

risposta

18

E 'il glob del primo argomento considerato come una directory

negli script Bash gli argomenti in un file vengono passati allo script come $0 (che è il nome dello script), allora $1, $2 , $3 ... Per accedere a tutti loro, usate la loro etichetta o usate uno dei costrutti del gruppo. Per i costrutti di gruppo ci sono $* e [email protected]. ($* considera tutti gli argomenti come un blocco dove come [email protected] li considera delimitati da $IFS)

5

$1 intende il primo parametro.
for file in $1/* significa loop con la variabile file con il valore del nome di ciascun file nella directory denominata nel primo parametro.

2

$ 1 è il primo argomento della riga di comando. Se si esegue ./asdf.sh a b c d e, quindi $ 1 sarà a, $ 2 sarà b, ecc. Nelle shell con funzioni, $ 1 può servire come primo parametro di funzione e così via.