GNU/Linux >> Linux Esercitazione >  >> Linux

Come passare più argomenti da eseguire con lo script .sh

Il metodo più semplice per leggere gli argomenti può essere descritto come segue;

Ogni argomento è referenziato e analizzato dal $IFS o internal file separator attualmente definito . Il carattere predefinito è uno spazio.

Ad esempio, prendi quanto segue; # ./script.sh arg1 arg2

L'elenco degli argomenti in questo esempio è arg1 = $1 e arg2 = $2 che può essere riscritto come arg1 arg2 = [email protected] .

Un'altra nota è l'uso di un elenco di registri, quanto spesso cambia? La mia ipotesi è quotidiana. Perché non utilizzare l'output della directory come matrice del ciclo iterativo? Ad esempio;

for i in $(ls /path/to/logs); do
  ./workaround.sh $i;
done

O meglio ancora, passa all'uso di functions in bash per eliminare il disordine.

function process_file()
{
  # transfer file code/command
}

function iterate_dir()
{
  local -a dir=($(ls $1))
  for file in ${dir[@]}; do
    process_file $file
  done
}

iterate_dir /path/to/log/for

Sebbene questi siano solo suggerimenti per migliorare la tua conoscenza degli script di shell, devo sapere se stai riscontrando un errore e avrei anche bisogno di conoscere i dettagli di ciascun codice e / o funzionalità di script. Facendo uso del -x argument aiuta anche a eseguire il debug degli script.

Se stai semplicemente trasferendo i log, potresti voler eliminare tutti gli script e utilizzare rsync , rsyslog o syslog poiché sono tutti molto più adatti per l'attività in questione.


xargs -n 1 ./script.sh <list.txt

In questo esempio, xargs eseguirà ./script.sh più volte con un singolo argomento letto dal suo input standard.

L'input standard proviene dal file list.txt tramite un semplice reindirizzamento dell'input della shell. Ciò presuppone che il file list.txt contiene un argomento da utilizzare con lo script per riga.

Il ./script.sh lo script verrà eseguito una volta per ogni riga nel list.txt file.

Informazioni sul -n flag a xargs

-n number

Richiama utility utilizzando il maggior numero possibile di argomenti di input standard, fino a number (un intero decimale positivo) argumentsmaximum.

Un'altra soluzione sarebbe consentire allo script di leggere direttamente da list.txt , o per prendere più argomenti della riga di comando (le voci da list.txt ) e per scaricare i file in uno o più batch. Ma dal momento che non sappiamo quali siano i meccanismi della sceneggiatura, non posso fornire alcuna spiegazione dettagliata su come procedere.


all'interno dello script:è necessario un ciclo di lettura come while read ; do ......... ; done < filename trattare le righe come variabile $REPLY...

ad esempio

while read 
do
mv $REPLY $REPLY.old
done < liste.txt

rinominerà qualsiasi nome di file all'interno di liste.txt in filename.old

ora hai la struttura che puoi adattare alle tue esigenze a seconda di cosa intendi per " nel nome di ogni file di registro in list.txt da eseguire." :)


Linux
  1. Come modificare l'estensione di più file?

  2. Passare gli argomenti della riga di comando allo script Bash?

  3. Come gestire gli interruttori in uno script di shell?

  4. Eseguire script con argomenti come utente?

  5. Come eseguire il grep con l'output a colori

Come scrivere uno script Bash con esempi

Come eseguire un comando Shell con Python

Come elencare i filesystem in Linux con lfs

Come eseguire un comando in uno script della shell?

Come passare argomenti a uno script richiamato dal comando source?

Come eseguire uno script bash?