Autor Téma: příkazový řádek dotaz  (Přečteno 1640 krát)

Offline dirtyqeen

  • Nováček
  • *
  • Příspěvků: 5
    • Zobrazit profil
příkazový řádek dotaz
« kdy: 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.

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.324
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re:příkazový řádek dotaz
« Odpověď #1 kdy: 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.
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Pentium G2020
* GPU: NVIDIA GTX650 1GD5
* MB: LenINovo IH61M
* RAM: 8GiB Deutsche Demokratische Republik 3

Offline dirtyqeen

  • Nováček
  • *
  • Příspěvků: 5
    • Zobrazit profil
Re:příkazový řádek dotaz
« Odpověď #2 kdy: 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.

Offline dirtyqeen

  • Nováček
  • *
  • Příspěvků: 5
    • Zobrazit profil
Re:příkazový řádek dotaz
« Odpověď #3 kdy: 07. 11. 2017, 20:13:53 »
Pro upřesnění:
má být vytvořený skript, tedy sekvence příkazů ve spustitelném souboru

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.324
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re:příkazový řádek dotaz
« Odpověď #4 kdy: 08. 11. 2017, 12:09:59 »
Večer na to kouknu.
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Pentium G2020
* GPU: NVIDIA GTX650 1GD5
* MB: LenINovo IH61M
* RAM: 8GiB Deutsche Demokratische Republik 3

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.324
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re:příkazový řádek dotaz
« Odpověď #5 kdy: 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
« Poslední změna: 09. 11. 2017, 07:38:03 od Roman Horník »
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Pentium G2020
* GPU: NVIDIA GTX650 1GD5
* MB: LenINovo IH61M
* RAM: 8GiB Deutsche Demokratische Republik 3

Offline dirtyqeen

  • Nováček
  • *
  • Příspěvků: 5
    • Zobrazit profil
Re:příkazový řádek dotaz
« Odpověď #6 kdy: 09. 11. 2017, 13:33:12 »
Děkuji mnohokrát.