příkazový řádek dotaz

Založil dirtyqeen, 06. 11. 2017, 17:54:48

Předchozí téma - Další téma

dirtyqeen

Zdravím, mám úkol vytvořit jednoduchý příkaz na nastavení práva pro spuštění, kdy uživatel žádá cestu k adresáři, ve kterém se vyhledají všechny soubory, které obsahují v prvním řádku hlavičku: pokud nalezený soubor nemá nastavené právo ke spuštění, tak se toto právo nastaví. Součástí řešení je také kontrola platnosti cest a zobrazení textové informace o průběhu činnosti.

Můžete mi, prosím pomoci? Děkuji moc za Váš čas.
B.

Roman Horník

Má to bejt shellovej příkaz, kterej zase bude hledat shellový (nebo libovolný se shebangem a cestou k interpretru na prvním řádku) skripty (na příponě nezáleže)?
Má to umět zpětnou kontrolu?
Má pracovat rekurzivně (hledat v podsložkách)? Pokud jo, do jaký hloubky?
Má se získat cesta z parametru, proměnný, nebo na žádost programu?
Má se výstup třídit ("Má oprávnění" / "Získal oprávnění" - v případě zpětný kontroly dále "Nelze změnit oprávnění")?
Může se použít pro lepší čitelnost ANSI formátování (tučně, podtrženě, s polovičním jasem, kurzívou, blikavě, inverzně, barvy, a to včetně kombinací)?

Tak jako tak, jednoduchej příkaz to nebude. Buďto to bude skriptík, nebo příkaz dlouhej jak pracovní tejden (ten samej skriptík, ale na jednom řádku).

Ať je to jak chce, takovou bashovinu umím zhotovit. Ale dodej další informace, ať se s nevyhovujícím výsledkem zbytečně hodinu nepatlám.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

dirtyqeen

Má to bejt shellovej příkaz, kterej zase bude hledat shellový (nebo libovolný se shebangem a cestou k interpretru na prvním řádku) skripty (na příponě nezáleže)?
Jen shell co zas bude hledat jen shell.

Má to umět zpětnou kontrolu?

kontrolujte, zda změna práv neselže

pouze v zadaném adresáři


Má se získat cesta z parametru, proměnný, nebo na žádost programu?

pokud je jako parametr, tak se neptá a použije

pokud není parametr, tak se zeptá


Má se výstup třídit ("Má oprávnění" / "Získal oprávnění" - v případě zpětný kontroly dále "Nelze změnit oprávnění")?

Třídit se nemá.


Může se použít pro lepší čitelnost ANSI formátování (tučně, podtrženě, s polovičním jasem, kurzívou, blikavě, inverzně, barvy, a to včetně kombinací)?
Jde o to, udělat to co nejprimitivněji.

Předem děkuji moc za ochotu.

dirtyqeen

Pro upřesnění:
má být vytvořený skript, tedy sekvence příkazů ve spustitelném souboru

Roman Horník

Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Roman Horník

#5
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
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

dirtyqeen