GNU/Linux >> Znalost Linux >  >> Linux

Jak předat více argumentů ke spuštění pomocí skriptu .sh

Nejjednodušší způsob čtení argumentů lze popsat následovně;

Každý argument je odkazován a analyzován pomocí $IFS nebo aktuálně definovaný internal file separator . Výchozí znak je mezera.

Vezměme například následující; # ./script.sh arg1 arg2

Seznam argumentů v tomto příkladu je arg1 = $1 a arg2 = $2 který lze přepsat jako arg1 arg2 = [email protected] .

Další poznámka je použití seznamu logů, jak často se to mění? Můj předpoklad je denní. Proč nepoužít výstup adresáře jako pole vaší iterační smyčky? Například;

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

Nebo ještě lépe, přejděte k použití functions v bash k odstranění nepořádku.

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

I když jsou to pouze návrhy, jak zlepšit vaše znalosti skriptování v shellu, musím vědět, zda se nejedná o chybu, kterou dostáváte, a také bych potřeboval znát podrobnosti o kódu a/nebo funkčnosti každého skriptu. Využití -x argument také pomáhá ladit skriptování.

Pokud pouze přenášíte protokoly, možná budete chtít odstranit všechny skripty dohromady a použít rsync , rsyslog nebo syslog protože všechny jsou pro daný úkol mnohem vhodnější.


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

V tomto příkladu xargs spustí ./script.sh vícekrát s jedním argumentem přečteným z jeho standardního vstupu.

Standardní vstup pochází ze souboru list.txt přes jednoduché přesměrování vstupu shellu. To předpokládá, že list.txt soubor obsahuje jeden argument pro použití se skriptem na řádek.

./script.sh skript bude proveden jednou pro každý řádek v list.txt soubor.

O -n příznak na xargs

-n number

Vyvolejte nástroj použití co největšího počtu standardních vstupních argumentů, až do number (kladné dekadické celé číslo) argumentsmaximum.

Dalším řešením by bylo umožnit skriptu číst přímo z list.txt , nebo převzít více argumentů příkazového řádku (položky z list.txt ) a ke stažení souborů v jedné nebo několika dávkách. Ale protože nevíme, jaká je mechanika skriptu, nemohu podat žádné podrobné vysvětlení, jak to udělat.


uvnitř skriptu:potřebujete smyčku čtení jako while read ; do ......... ; done < filename zacházet s řádky jako s proměnnou $REPLY...

například

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

přejmenuje jakýkoli název souboru ze souboru liste.txt na soubor.old

nyní máte strukturu, kterou můžete přizpůsobit svým potřebám v závislosti na tom, co rozumíte pod pojmem " v názvu každého souboru protokolu v souboru list.txt, který se má spustit." :)


Linux
  1. Jak mohu předat všechny argumenty s xargs uprostřed příkazu v linuxu

  2. Jak odstranit znak \r pomocí sed

  3. Jak spustit bash skript?

  1. Jak předat parametry aliasu?

  2. Předat argumenty příkazového řádku skriptu Bash?

  3. Jak zacházet s přepínači ve skriptu Shell?

  1. Spustit skript s argumenty jako uživatel?

  2. Jak se popasovat s barevným výstupem

  3. Jak předat parametry skriptu Bash?