Debian fórum

Dotazy => Programování => Téma založeno: dirtyqeen 06. 11. 2017, 17:54:48

Název: příkazový řádek dotaz
Přispěvatel: dirtyqeen 06. 11. 2017, 17:54:48
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.
Název: Re:příkazový řádek dotaz
Přispěvatel: Roman Horník 07. 11. 2017, 07:15:09
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.
Název: Re:příkazový řádek dotaz
Přispěvatel: dirtyqeen 07. 11. 2017, 17:03:50
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.
Název: Re:příkazový řádek dotaz
Přispěvatel: dirtyqeen 07. 11. 2017, 20:13:53
Pro upřesnění:
má být vytvořený skript, tedy sekvence příkazů ve spustitelném souboru
Název: Re:příkazový řádek dotaz
Přispěvatel: Roman Horník 08. 11. 2017, 12:09:59
Večer na to kouknu.
Název: Re:příkazový řádek dotaz
Přispěvatel: Roman Horník 09. 11. 2017, 06:41:11
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
Název: Re:příkazový řádek dotaz
Přispěvatel: dirtyqeen 09. 11. 2017, 13:33:12
Děkuji mnohokrát.