Dotazy > Programování
příkazový řádek dotaz
Roman Horník:
Může bejt?
#!/bin/bash
## Nebudeme používat mezery v názvech souborů jako oddělovače, ale jen \n
IFS=$'\n'
## Pokud nebyla zadána cesta co by parametr, zeptej se
if [ "$1" == "" ]
then
echo -ne "\e[1mZadej cestu prohledávané složky:\e[0m "
read slozka
else
slozka=$1
fi
## Dotěrná smyčka žádající správnou cestu do složky
while :
do if [ -d "$slozka" ]
then
break
else
echo -ne "\n\e[1m'$slozka' NENÍ platná složka\nZadejte PLATNOU cestu prohledávané složky:\e[0m "
read slozka
fi
done
echo -e "
\e[1;4mProbíhá kontrola souborů skriptů ve složce '$slozka':\e[0m"
## Vyhledá bez rekurze (-maxdepth 1) všechny soubory (-type f) ve složce s
## nenulovou velikostí (-size +0c)…
for soubor in $(find $slozka -maxdepth 1 -type f -size +0c)
do
## … a jestliže má v hlavičce #!/ (a nějaký malý písmeno; interpretr může
## bejt i mimo /bin, třeba v /usr/bin, /sbin, /opt a tak; berou se první
## 4 bajty),…
if head -c4 "$soubor" | grep -m1 -q "^\#\!\/[a-z]"
## … pak, pokud je spustitelnej,…
then if [ -x "$soubor" ]
then
## … prostě jen napíše OK a název souboru,…
echo -e " \e[1mOK\e[0m\t$soubor"
## … jinak…
else
## se pokusí bez keců (2> /dev/null) přidat souboru
##spustitelnost, přičemž…
chmod +x "$soubor" 2> /dev/null
## … pokud už spustitelnej je,…
if [ -x "$soubor" ]
## … pak vypíše +x a název souboru,…
then
echo -e " \e[1;94m+x\e[0;94m\t$soubor\e[00m"
## … nicméně, pokud to změnit nepůjde (třeba jinej vlastník),
##pak napíše KO a název souboru
else
echo -e " \e[1;91mKO\e[0;91m\t$soubor\e[00m"
fi
fi
fi
## Cyklus 'for' udělá tolik koleček, kolik je nalezenejch (všech) souboru v
## zadaným umístění
done
## No a nakonec něco jako legenda
echo -e "
\e[1mOK\e[0m = Soubor již spustitelný byl
\e[1;94m+x\e[00m = Soubor úspěšně učiněn spustitelným
\e[0;91mKO\e[00m = Oprávnění nebylo možné změnit
"
P. S.: To \e[<blablabla>m je ono barvičkování. Je tam jen pro přehlednost, nemusí tam bejt. V tom případě lze za echo vypustit -e
dirtyqeen:
Děkuji mnohokrát.
Navigace
[0] Seznam témat
[*] Předchozí strana
Přejít na plnou verzi