/ / Bash funkcia s grep, pomocou if a potom príkazy - linux, bash, shell, premenné, if-statement

Funkcia Bash s grepom, pomocou príkazov if a then - linux, bash, shell, premenné, if-statement

Snažil som sa vybudovať funkciu, ktorá budedovoľte mi, aby som vykonal dynamické vyhľadávanie grepov - dynamické v tom, že keď je pri volaní funkcie zadaná viac ako jedna premenná, potom prenesie ďalšiu premennú cez grep. Nikdy by som nemal potrebovať viac ako dve premenné, ale zaujímalo by sa aj o to, ako to urobiť.

Príklad požadovanej funkcie:

> function word1 word2

výsledok:

(
cd /path/folder;
less staticfile | grep -i word1 | grep -i --color word2
)

Vyššie uvedené funguje skvele, ak tam budú vždy dve slová. Pokúsim sa naučiť sa používať, ak a potom vyhlásenia, aby som bol flexibilný v počte premenných.

function ()
{
if [ ! "$#" -gt "1" ];
then
(
cd ~/path/folder;
less staticfile | grep -i $1 | grep --color -i $2
)
else
(
cd ~/path/folder;
less staticfile | grep --color $1
)
fi
}

Keď spustím túto funkciu, zdá sa, že robím opak -

> function word1

vráti chybu, pretože z nejakého dôvodu používa príkaz "potom", ale nemôže vložiť do druhého hovoru grep.

> function word1 word2

iba slovo "word1" - preto používa vyhlásenie "else". Čo robím zle? Existuje nejaký jednoduchší spôsob, ako to urobiť?

odpovede:

0 pre odpoveď č. 1

Myslím, že to urobí to, čo chceš. Môžete to fungovať. (Všimnite si, že sa používa po zavedení grep.) Tu je kód, po ktorom nasleduje testovací súbor a výstup. (Vezme akýkoľvek počet # args.)

#!/bin/bash
if [[ $# -lt 2 ]]; then
echo -e "nusage: ./prog.sh file grep-string1 grep-string2 grep-string3...n"
echo -e "At least two arguments are required. exiting.n"
exit 5
fi
fname=$1  # always make your file name the first argument
i=2  # initialize the argument counter
cmd="cat $fname"
while [[ $i -le $# ]]; do
cmd=${cmd}" | grep ${!i}"
(( i++ ))
done
eval $cmd

Takže vstupný súbor pre toto môže byť nazvaný tfile s obsahom:

a circuit
pavement
bye

Spustenie kódu funguje takto:

./prog.sh tfile e ye
bye