Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
suggerimento script gentoo
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page 1, 2  Next  
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Sat Jul 14, 2018 2:30 pm    Post subject: suggerimento script gentoo Reply with quote

di seguito c'è il mio primo script di gentoo
raccoglie tutte le nozioni che ho appreso

secondo me va bene nella sostanza ma no nelle forma

cosa può essere migliorato , non sono riuscito ad esempio a creare dei sub-menu specialmente nella parte dell'aggiornamento
avrei voluto creare un submenu che indicava i comandi da eseguire invece che farli andare in automatico
qui lo script , è molto elementare però mi aiuta a memorizzare meglio i comandi e le istruzioni da dare
Code:
#!/bin/bash

 while true
 do
 PS3='Seleziona la tua scelta: '
 options=("cerca" "installa" "overlays" "Abilita_Use-Flag" "Disabilita_Use-Flag" "aggiorna il sistema" "rimuovi pacchetto" "pulizia sistema /var/tmp/" "elimina le vecchie versioni dei sorgenti" "Esci")
 select opt in "${options[@]}"
 do
     case $opt in
         "cerca")
              echo "cerca il pacchetto"
      read CERCA
      emerge --search $CERCA
         echo "eseguito"
          break
       ;;
         "installa")
             echo "nome pacchetto da installare"
      read INSTALLA
         
            emerge --ask $INSTALLA
         echo "eseguito"
             break
             ;;
   "overlays")
echo "devi prima scaricare l'ebuild"
echo premi un tasto per continuare
read -n1
cd /home/trigg/Scaricati/

echo incolla radice/pacchetto
read rp
ls

echo incolla ebuild
read ebuild

mkdir -p /usr/local/portage/$rp

cp $ebuild /usr/local/portage/$rp
#mv $ebuild /mnt/DATI/gentoo/'installazione gentoo'/ebuild/
cd /usr/local/portage/$rp

repoman manifest

emerge --ask $rp

break
;;
         "Abilita_Use-Flag")
             echo "categoria/pacchetto"
      read cpt
   echo "Use-flag da aggiungere"
        echo "pacchetto"
      read use
       euse --enable $use --package $cpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
             break
             ;;
   "Disabilita_Use-Flag")
            echo "categoria/pacchetto"
      read ct
   echo "Use-flag da aggiungere"
        echo "pacchetto"
      read us
       euse --disable $us --package $ct
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
             break
             ;;
   "aggiorna il sistema")
             echo "stai per aggiornare  il portage tree
      premi un tasto per continuare"
      read -n1
           emerge --sync
      echo "Stai per aggiornare il sistema
      premi un tasto per continuare"
      read -n1
      emerge --update --changed-use --deep --with-bdeps=y @world
echo "stai per rimuovere i vecchi pacchetti di sistema
      premi un tasto per continuare"
      read -n1
               emerge --ask --depclean
 emerge @preserved-rebuild
emerge --ask --depclean
 emerge --update --newuse --deep @world         
         echo "eseguito"
             break
             ;;
   "rimuovi pacchetto")
            echo "categoria/pacchetto da rimuovere"
      read ctpr
       emerge --depclean --ask $ctpr
         echo "eseguito"
             break
             ;;

   "pulizia sistema /var/tmp/")
 echo "stai per eliminare le cartelle in /var/tmp/portage/  premi un tasto per continuare"
   read -n1
 /usr/bin/find /var/tmp/portage/  -mindepth 1 -maxdepth 1 -exec /bin/rm -rf {} +;
   break
             ;;   

   "elimina le vecchie versioni dei sorgenti")
   echo "stai per eseguire eclean-dist premi un tasto per continuare"
    read -n1
   eclean-dist
 break
             ;;
         "Esci")
             echo "Grazie per aver usato il mio script"                 
             exit
             ;;
         *) echo opzione non valida;;
     esac
 done
done


grazie per avermi insegnato tutto questo ^_^
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Sat Jul 14, 2018 3:21 pm    Post subject: Reply with quote

Code:
echo -n "Inserisci la risposta : " ; read RIS


starebbe meglio : tutto in una riga ...anche nell'esecuzione

dal man di echo
Quote:
-n do not output the trailing newline


per la ricerca dei pacchetti , potrei suggerirti l'utilizzo di
Code:
app-portage/eix
     Available versions:  0.32.9 (~)0.33.0-r1 (~)0.33.2 {debug doc nls sqlite}
     Installed versions:  0.33.2(21:35:16 03/05/2018)(nls sqlite -debug -doc)
     Homepage:            https://github.com/vaeth/eix/
     Description:         Search and query ebuilds


Code:
man eix

_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
fedeliallalinea
Bodhisattva
Bodhisattva


Joined: 08 Mar 2003
Posts: 20103
Location: here

PostPosted: Sat Jul 14, 2018 3:36 pm    Post subject: Reply with quote

Io preferisco dare sempre i comandi a mano piuttosto che usare uno script, al massimo mi creo un file txt per quei comandi che uso poco e quindi con il rischio di scordarli.
Per la ricerca dei pacchetti anche io ti consiglio eix che e' piu' veloce, qui la pagina del wiki
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Sat Jul 14, 2018 6:02 pm    Post subject: Reply with quote

ho modificato lo script seguendo i suggerimenti
aggiungendo eix e modificando le righe di input
dopo ho modificato anche l'aggiornamento
lasciando più controllo all'utente :)
anche se mi piacerebbe creare il sub menu nell'opzione aggiorna sistema
dove si può scegliere liberamente il comando da lanciare

Code:
#!/bin/bash

 while true
 do
 PS3='Seleziona la tua scelta: '
 options=("Cerca" "Installa" "Overlays" "Abilita Use-Flag" "Disabilita Use-Flag" "Aggiorna il sistema" "Rimuovi pacchetto" "Pulizia sistema /var/tmp/" "Elimina le vecchie versioni dei sorgenti" "Esci")
 select opt in "${options[@]}"
 do
     case $opt in
         "Cerca")
        echo -n "Quale pacchetto desideri cercare? " ; read pack
   echo -e "vuoi aggiornare eix?\n(premi s per sì o un altro tasto per no)"
   read -s -n1
      if [ "$REPLY" == "s" -o "$REPLY" == "S" ]
      then
      eix-update
      eix $pack
      else
      eix $pack
         fi
                break
              ;;
         "Installa")
             echo -n "pacchetto da installare " ; read INSTALLA
      emerge --ask $INSTALLA
      echo "eseguito"
                   break
                        ;;
   "Overlays")
echo "devi prima scaricare l'ebuild"
echo premi un tasto per continuare
read -n1
cd /home/trigg/Scaricati/

echo -n "Indica Categoria/Pacchetto " ; read rp
ls

echo -n "Inserisci .ebuild " ; read ebuild
mkdir -p /usr/local/portage/$rp

cp $ebuild /usr/local/portage/$rp
#mv $ebuild /mnt/DATI/gentoo/'installazione gentoo'/ebuild/
cd /usr/local/portage/$rp

repoman manifest
emerge --ask $rp

break
;;
         "Abilita Use-Flag")
             echo -n "Indica Categoria/Pacchetto" ; read cpt
   echo -n "Indica Use-flag da abilitare" ; read use
       euse --enable $use --package $cpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
             break
             ;;
   "Disabilita Use-Flag")
      echo -n "Indica Categoria/Pacchetto" ; read dcpt
   echo -n "Indica Use-flag da disabilitare" ; read duse
       euse --disable $duse --package $dcpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
             break
             ;;
   "Aggiorna il sistema")
             echo -e "vuoi aggiornare il il portage tree?\n(premi s per sì o un altro tasto per no)"
      read -s -n1
      if [ "$REPLY" == "s" -o "$REPLY" == "S" ]
      then
            emerge --sync
      else
      echo -e "vuoi lanciare emerge --update --changed-use --deep --with-bdeps=y @world?\n(premi s per sì o un altro tasto per no)"
      read -s -n1
      if [ "$REPLY" == "s" -o "$REPLY" == "S" ]
      then
         emerge --update --changed-use --deep --with-bdeps=y @world
      else
      echo -e "vuoi lanciare emerge --update --newuse --deep @world?\n(premi s per sì o un altro tasto per no)"
      read -s -n1
      if [ "$REPLY" == "s" -o "$REPLY" == "S" ]
      then
         emerge --update --newuse --deep @world
      else
      echo -e "vuoi lanciare emerge --ask --depclean?\n(premi s per sì o un altro tasto per no)"
      read -s -n1
      if [ "$REPLY" == "s" -o "$REPLY" == "S" ]
      then
                   emerge --ask --depclean
      else
          echo -e "vuoi lanciare emerge @preserved-rebuild?\n(premi s per sì o un altro tasto per no)"
          read -s -n1
      if [ "$REPLY" == "s" -o "$REPLY" == "S" ]
      then
         emerge @preserved-rebuild
      else
         echo "Continua"
         fi
         fi
          fi
         fi
         fi
        echo "eseguito"
             break
             ;;
   "Rimuovi pacchetto")
            echo -n "Indica categoria/pacchetto da rimuovere" ; read ctpr
       emerge --depclean --ask $ctpr
         echo "eseguito"
             break
             ;;

   "Pulizia sistema /var/tmp/")
 echo "stai per eliminare le cartelle in /var/tmp/portage/  premi un tasto per continuare"
   read -n1
 /usr/bin/find /var/tmp/portage/  -mindepth 1 -maxdepth 1 -exec /bin/rm -rf {} +;
   break
             ;;   

   "Elimina le vecchie versioni dei sorgenti")
   echo "stai per eseguire eclean-dist premi un tasto per continuare"
    read -n1
   eclean-dist
 break
             ;;
         "Esci")
             echo "Grazie per aver usato il mio script"                 
             exit
             ;;
         *) echo opzione non valida;;
     esac
 done
done


:) più di così posso solo modificare l'aspetto dello script ,per andare oltre dovrò approfondire bin bash :)


Last edited by trigg on Sat Jul 14, 2018 6:24 pm; edited 1 time in total
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Sat Jul 14, 2018 6:20 pm    Post subject: Reply with quote

se le opzioni di scelta le hai dichiarate in una matrice
Code:
 options=("Cerca" "Installa" "Overlays" "Abilita Use-Flag" "Disabilita Use-Flag" "Aggiorna il sistema" "Rimuovi pacchetto" "Pulizia sistema /var/tmp/" "Elimina le vecchie versioni dei sorgenti" "Esci")


i cui indici cominciano da "0" (zero) , nelle scelte di "case" puoi indicare il relativo indice senza ripetere l'intera scelta

${options[0]} equivale al primo indice ossia "Cerca"
${options[1]} equivale al secondo indice , ossia "Installa"

Esempio
Code:
VALORE=("A","B","C")
echo ${VALORE[@]} # Stampa tutti i valori della matrice
echo ${VALORE[0]} # Stampa il primo valore della matrice - indice 0
echo ${VALORE[2]} # Stampa il terzo valore della matrice - indice 2


...

per cui nel "case" di scelta puoi indicare il relativo indice

Code:

case opt in ${options[@]}
 do
   "${options[0]}") ---codice per la ricerca ---
 ;;
   "${options[1]}")  --- codeice per installare ---
;;
[...]
esac


inoltre potresti ogni operazione creare una funzione per poi richiamarla in "case"

Code:

## Dichiara la funzione di ricerca
fricerca () {
   ...il codice della funzione cerca ...
}


poi in esec richiami la funzione
Code:

case opt in ${options[@]}
 do
   "${options[0]}") fricerca
 ;;
   "${options[1]}")  <funzione2>
;;
[...]
esac


se vuoi mantenere il loop di case eliminado il "while"
puoi inserire
Code:
REPLY=

alla fine di ogni condizione ( a parte quella di uscita)
Code:
case opt in ${options[@]}
 do
   "${options[0]}") fricerca
   REPLY=
 ;;
   "${options[1]}")  <funzione2>
    REPLY=
;;
[...]
esac


Le funzioni vanno dichiarate all'inizio o comunque prima che vengano richiamate
_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Sat Jul 14, 2018 6:27 pm    Post subject: Reply with quote

ci proverò

domani a mente fresca farò delle prove

grazie per le dritte :)
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Sat Jul 14, 2018 7:12 pm    Post subject: Reply with quote

ti dò una spintarella...
Code:
#!/bin/bash
clear

## Opzioni per il menu
options=("Cerca" "Installa" "Overlays" "Abilita Use-Flag" "Disabilita Use-Flag" "Aggiorna il sistema" "Rimuovi pacchetto" "Pulizia sistema /var/tmp/" "Elimina le vecchie versioni dei sorgenti" "Esci")


## Dichiaro le varie funzioni

cerca () {
            # Il seguente controllo imposta come programma di ricerca di default "eix"
            # Se "eix" non è installato passa al comando "emerge -s"
            if which eix ; then
                bsearch="$(which eix)"
            else
                bsearch="$(which emerge) -s"
            fi
            clear
            echo -n "Ricerca pacchetto : " ; read pkg
            echo
            # Per la ricerca si possono inserire valori multipli , se non viene indicato nulla viene visualizzato un messaggio.
            if [[ -z $pkg ]] ; then
                echo "Nessuna ricerca da effettuare."
            else
                # Questo ciclo controlla ogni variabile inserita (i pacchetti da cercare)
                # eix mostra un output limitato se i valori trovati superano un cero limite.
                # impostando un valore infinito mostrerà tutti i risultati.
                clear
                export EIX_LIMIT=0
                for i in $pkg ; do
                    $bsearch $i
                done
                echo -n "Premi un tasto per continuare" ; read $key
            fi
}


### Scrivi le altre funzioni
###
### Fine delle funzioni


# Il menu
clear
PS3="Inserisci valore : "
select opt in "${options[@]}"
    do
        case $opt in
            "${options[0]}")
                    clear
                    # Richiama la funzione "cerca" dichiarata precedentemente
                    cerca
                    REPLY=
            ;;
            "${options[1]}")
                    clear
                    echo "Hai scelto --> ${options[1]}"
                    REPLY=
            ;;
            # Continua con le altre funzioni
            #
            "${options[-1]}") # Richiama l'ultimo indice (Uscita dallo script)
                    clear
                    exit
            ;;
        esac
    done





Esecuzione
Code:
Ricerca pacchetto : firefox eix

[U] www-client/firefox
     Available versions:  52.6.0^d 52.8.0^d (~)52.9.0^d (~)60.1.0^d (~)61.0-r1^d {bindist custom-cflags custom-optimization dbus debug eme-free +gmp-autoupdate gtk2 hardened hwaccel jack +jemalloc neon pgo pulseaudio rust +screenshot selinux startup-notification system-cairo system-harfbuzz system-icu system-jpeg system-libevent system-libvpx system-sqlite test wifi L10N="ach af an ar as ast az bg bn-BD bn-IN br bs ca cak cs cy da de dsb el en-GB en-ZA eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy ga gd gl gn gu he hi hr hsb hu hy id is it ja ka kab kk km kn ko lij lt lv mai mk ml mr ms nb nl nn or pa pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv ta te th tr uk uz vi xh zh-CN zh-TW"}
     Installed versions:  61.0^d(21:57:54 29/06/2018)(dbus gmp-autoupdate jack pulseaudio screenshot startup-notification system-jpeg wifi -bindist -custom-cflags -custom-optimization -debug -eme-free -hardened -hwaccel -neon -selinux -system-harfbuzz -system-icu -system-libevent -system-libvpx -system-sqlite -test L10N="-ach -af -an -ar -as -ast -az -bg -bn-BD -bn-IN -br -bs -ca -cak -cs -cy -da -de -dsb -el -en-GB -en-ZA -eo -es-AR -es-CL -es-ES -es-MX -et -eu -fa -ff -fi -fr -fy -ga -gd -gl -gn -gu -he -hi -hr -hsb -hu -hy -id -is -it -ja -ka -kab -kk -km -kn -ko -lij -lt -lv -mai -mk -ml -mr -ms -nb -nl -nn -or -pa -pl -pt-BR -pt-PT -rm -ro -ru -si -sk -sl -son -sq -sr -sv -ta -te -th -tr -uk -uz -vi -xh -zh-CN -zh-TW")
     Homepage:            http://www.mozilla.com/firefox
     Description:         Firefox Web Browser

* www-client/firefox-bin
     Available versions:  52.9.0^ms 60.1.0^ms {+ffmpeg +pulseaudio selinux startup-notification L10N="ach af an ar as ast az bg bn-BD bn-IN br bs ca cs cy da de el en-GB en-ZA eo es-AR es-CL es-ES es-MX et eu fa fi fr fy ga gd gl gu he hi hr hsb hu hy id is it ja kk km kn ko lt lv mai mk ml mr ms nb nl nn or pa pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv ta te th tr uk uz vi xh zh-CN zh-TW"}
     Homepage:            https://www.mozilla.org/en-US/firefox/
     Description:         Firefox Web Browser

Found 2 matches
[I] app-portage/eix
     Available versions:  0.32.9 (~)0.33.0-r1 (~)0.33.2 {debug doc nls sqlite}
     Installed versions:  0.33.2(21:35:16 03/05/2018)(nls sqlite -debug -doc)
     Homepage:            https://github.com/vaeth/eix/
     Description:         Search and query ebuilds

Premi un tasto per continuare

_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Mon Jul 16, 2018 8:04 am    Post subject: Reply with quote

ok dopo un giorno di emicrania penso di aver capito
questo è l'inizio la cosa che manca è tornare al menu principale dal sub menu
Code:

#!/bin/bash

#Menu
options[0]="CERCA"
options[1]="INSTALLA/DISINSTALLA PACCHETTI"
options[2]="GESTIONE USE FLAG"
options[3]="AGGIORNA SISTEMA"
options[4]="PULIZIA SISTEMA"
options[5]="ESCI"


function ACTIONS {
    if [[ ${choices[0]} ]]; then

PS3='CERCA PACCHETTO: '
 options=("Aggiorna Eix e Cerca " "Cerca Senza Aggiornare " "Menu" )
 select opt in "${options[@]}"
 do
     case $opt in
         "Aggiorna Eix e Cerca ")
        echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix-update
      eix $pack
                 ;;
         "Cerca Senza Aggiornare ")
   echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix $pack
                    ;;
   "Menu")
     ACTIONS
       ;;

         *) echo opzione non valida;;
     esac
 done
fi
##########################################################
   
    if [[ ${choices[1]} ]]; then
   PS3='GESTIONE PACCHETTI: '
         options=("Installa da Portage Tree " "Installa da Overlays " "Rimuovi Pacchetto " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Installa da Portage Tree ")
             echo -n "pacchetto da installare " ; read INSTALLA
      emerge --ask $INSTALLA
      echo "eseguito"
                      ;;   
   
   "Installa da Overlays ")
   echo "devi prima scaricare l'ebuild"
   echo premi un tasto per continuare
   read -n1
   cd /home/trigg/Scaricati/G

   echo -n "Indica Categoria/Pacchetto " ; read rp
   ls

   echo -n "Inserisci .ebuild " ; read ebuild
   mkdir -p /usr/local/portage/$rp

   cp $ebuild /usr/local/portage/$rp
   #mv $ebuild /mnt/DATI/gentoo/'installazione gentoo'/ebuild/
   cd /usr/local/portage/$rp

   repoman manifest
   emerge --ask $rp
         ;;
   "Rimuovi Pacchetto ")
            echo -n "Indica categoria/pacchetto da rimuovere" ; read ctpr
       emerge --depclean --ask $ctpr
         echo "eseguito"
             break
             ;;
   "Menu")
     break 1
       ;;

         *) echo opzione non valida;;
     esac
 done
   
    fi
#################################################
    if [[ ${choices[2]} ]]; then
   PS3='GESTIONE USE-FLAG: '
         options=("Abilita Use-Flag " "Disabilita Use-Flag " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Abilita Use-Flag ")
             echo -n "Indica Categoria/Pacchetto da ricompilare" ; read cpt
   echo -n "Indica Use-flag da abilitare" ; read use
       euse --enable $use --package $cpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
             
             ;;
   "Disabilita Use-Flag ")
      echo -n "Indica Categoria/Pacchetto da ricompliare" ; read dcpt
   echo -n "Indica Use-flag da disabilitare" ; read duse
       euse --disable $duse --package $dcpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
             
             ;;
   "Menu")
           break 1
             ;;

         *) echo opzione non valida;;
     esac
 done
    fi
##########################################
    if [[ ${choices[3]} ]]; then
   PS3='AGGIORNA SISTEMA: '
         options=("Aggiorna Portage Tree " "Aggiorna Pacchetti e Dipendenze " "Esegui emerge --update --newuse --deep @world " "Esegui emerge --ask --depclean " "Esegui emerge @preserved-rebuild " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Aggiorna Portage Tree ")
         emerge --sync
      echo "eseguito"
             
                      ;;
   "Aggiorna Pacchetti e Dipendenze ")
echo "Stai per lanciare emerge --update --changed-use --deep --with-bdeps=y @world
Premi un Tasto per Continuare "
read -n1
emerge --update --changed-use --deep --with-bdeps=y @world
      echo "eseguito"
             
                      ;;
   "Esegui emerge --update --newuse --deep @world ")
   emerge --update --newuse --deep @world
      echo "eseguito"
             
                      ;;
   "Esegui emerge --ask --depclean ")
   emerge --ask --depclean
      echo "eseguito"
             
                      ;;

   "Esegui emerge @preserved-rebuild ")
   emerge @preserved-rebuild
      echo "eseguito"
             
                      ;;
   "Menu")
           break 1
             ;;

         *) echo opzione non valida;;
     esac
 done
    fi
#################################
    if [[ ${choices[4]} ]]; then
   PS3='PULIZIA DEL SISTEMA: '
         options=("Pulizia /var/tmp/portage " "Esegui eclean-dist " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Pulizia /var/tmp/portage ")
    echo "stai per eliminare le cartelle in /var/tmp/portage/  premi un tasto per continuare"
   read -n1
 /usr/bin/find /var/tmp/portage/  -mindepth 1 -maxdepth 1 -exec /bin/rm -rf {} +;
   
             ;;   
   "Esegui eclean-dist ")
   
   echo "stai per eseguire eclean-dist premi un tasto per continuare"
    read -n1
   eclean-dist

;;
   "Menu")
           break 1
             ;;

         *) echo opzione non valida;;
     esac
 done

             
    fi
###################################
    if [[ ${choices[6]} ]]; then
exit
    fi

}

#Variables
ERROR=" "

#Clear screen for menu
clear

#Menu function
function MENU {
    echo "Scegli l'operazione da eseguire"
    for NUM in ${!options[@]}; do
        echo "[""${choices[NUM]:- }""]" $(( NUM+1 ))") ${options[NUM]}"
    done
    echo "$ERROR"
}

#Menu loop
while MENU && read -e -p "Seleziona l'azione desiderata con il numero corrispondente
(Premi 2 volte il numero per deselezionare, ENTER per Continuare): " -n1 SELECTION && [[ -n "$SELECTION" ]]; do
    clear
    if [[ "$SELECTION" == *[[:digit:]]* && $SELECTION -ge 1 && $SELECTION -le ${#options[@]} ]]; then
        (( SELECTION-- ))
        if [[ "${choices[SELECTION]}" == "+" ]]; then
            choices[SELECTION]=""
        else
            choices[SELECTION]="+"
        fi
            ERROR=" "
    else
        ERROR="Scelta non Valida: $SELECTION"
    fi
done

ACTIONS
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Mon Jul 16, 2018 10:44 am    Post subject: Reply with quote

La matrice era corretta anche prima ,

VAL[X] era solo per farti capire come viene gestita la matrice. e utilizzarlo nel costrutto "case" :roll:

(infatti nel mio esemio ti avevo indicato la strada..)

le funzioni con le vecchie versioni di bash ,anche se ancora compatibili , venivano create con

Code:

function NOME {

codice

}


Ora come le ho indicate
Code:

nome () {
codice
}


non ho capito la variabile ERROR=" " cosa indica :?:

un suggerimento
quando vuoi indicare all' outpud a video un messaggio , utilizza sempre i doppi apici
Code:
echo "messaggio messaggio2"


Evita
Code:
 echo messaggio messagio2


Per scopi didattici può anche starci lo script , ma la gestione io la preferisco alla vecchia maniera , manuale. :twisted: anche perchè le situazioni non sono sempre uguali.
_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Mon Jul 16, 2018 11:01 am    Post subject: Reply with quote

error indica una selezione sbagliata
Code:
Scegli l'operazione da eseguire
[ ] 1) CERCA
[ ] 2) INSTALLA/DISINSTALLA PACCHETTI
[ ] 3) GESTIONE USE FLAG
[ ] 4) AGGIORNA SISTEMA
[ ] 5) PULIZIA SISTEMA
[ ] 6) ESCI
Scelta non Valida: 7
Seleziona l'azione desiderata con il numero corrispondente
(Premi 2 volte il numero per deselezionare, ENTER per Continuare):


non sto facendo un copia incolla tranne che per i comandi da riportare nello script
avevo optato per la selezione multipla per l'aggiornamento ma dopo ho preferito non usarla più ma la sto provando sulla brutta copia come MENU principale

e lo so , per le virgolette di echo ogni tanto le evito per risparmiare tempo ç ç

ma come mai non riesco a tornare al menu principale? le sto provando tutte
exit 1
break 1
MENU
ACTIONS

dovrei solo indicare il nome del menu ma o mi ritorna il sub-menu attivo o esce dallo script
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Mon Jul 16, 2018 11:11 am    Post subject: Reply with quote

ti basta un

Code:

*) echo "messaggio"
REPLY=
;;


non torni al menu perchè richiami la stessa funzione nella funzione.

ti suggerisco di creare più funzioni per più operazioni e di non perderti in menu nidificati...
_________________
BOINC ed il calcolo distribuito


Last edited by sabayonino on Mon Jul 16, 2018 11:26 am; edited 1 time in total
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Mon Jul 16, 2018 11:18 am    Post subject: Reply with quote

ora lo sto rifacendo ma non ne vengo a capo
un'altra emicrania all'orizzonte :?

Code:
#!/bin/bash

#Menu
options[0]="CERCA"
options[1]="INSTALLA/DISINSTALLA PACCHETTI"
options[2]="GESTIONE USE FLAG"
options[3]="AGGIORNA SISTEMA"
options[4]="PULIZIA SISTEMA"
options[5]="ESCI"


CERCA () {
    if [[ ${options[0]} ]]; then

PS3='SELEZIONA LA TUS SCELTA: '
 options=("Aggiorna Eix e Cerca " "Cerca Senza Aggiornare " "Menu" )
 select opt in "${options[@]}"
 do
     case $opt in
         "Aggiorna Eix e Cerca ")
        echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix-update
      eix $pack
   REPLY=
                 ;;
         "Cerca Senza Aggiornare ")
   echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix $pack
   REPLY=
                    ;;
   "Menu")
     devo riscrivere
       ;;

         *) echo opzione non valida;;
     esac
 done
fi

###############sopra altri comandi dopo menu principale##############
#Menu loop
PS3=("CERCA :" "INSTALLA/DISINSTALLA PACCHETTI :" "GESTIONE USE FLAG :" "AGGIORNA SISTEMA :" "PULIZIA SISTEMA :" "ESCI :")
select opt in "${options[@]}"
    do
        case $opt in
            "${options[0]}")

                    REPLY=
            ;;
    esac
    done



mi restituieisce questo

Code:
1) CERCA            4) AGGIORNA SISTEMA
2) INSTALLA/DISINSTALLA PACCHETTI  5) PULIZIA SISTEMA
3) GESTIONE USE FLAG         6) ESCI
CERCA :1
1) CERCA            4) AGGIORNA SISTEMA
2) INSTALLA/DISINSTALLA PACCHETTI  5) PULIZIA SISTEMA
3) GESTIONE USE FLAG         6) ESCI
CERCA :1
1) CERCA            4) AGGIORNA SISTEMA
2) INSTALLA/DISINSTALLA PACCHETTI  5) PULIZIA SISTEMA
3) GESTIONE USE FLAG         6) ESCI
CERCA :1
1) CERCA            4) AGGIORNA SISTEMA
2) INSTALLA/DISINSTALLA PACCHETTI  5) PULIZIA SISTEMA
3) GESTIONE USE FLAG         6) ESCI
CERCA :2
CERCA :1
1) CERCA            4) AGGIORNA SISTEMA
2) INSTALLA/DISINSTALLA PACCHETTI  5) PULIZIA SISTEMA
3) GESTIONE USE FLAG         6) ESCI
CERCA :1
1) CERCA            4) AGGIORNA SISTEMA
2) INSTALLA/DISINSTALLA PACCHETTI  5) PULIZIA SISTEMA
3) GESTIONE USE FLAG         6) ESCI
CERCA :2
CERCA :2
CERCA :3
CERCA :
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Mon Jul 16, 2018 11:36 am    Post subject: Reply with quote

:twisted:

riparti da quello che ti ho proposto...e ragionaci sopra.
hai indicato PS3 come matrice ... è una variabile espansa della prompt di bash per il comando select.

Quote:
PS1 The value of this parameter is expanded (see PROMPTING below)
and used as the primary prompt string. The default value is
``\s-\v\$ ''.
PS2 The value of this parameter is expanded as with PS1 and used as
the secondary prompt string. The default is ``> ''.
PS3 The value of this parameter is used as the prompt for the select
command (see SHELL GRAMMAR above).

PS4 The value of this parameter is expanded as with PS1 and the
value is printed before each command bash displays during an
execution trace. The first character of PS4 is replicated mul‐
tiple times, as necessary, to indicate multiple levels of indi‐
rection. The default is ``+ ''.

_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Mon Jul 16, 2018 12:08 pm    Post subject: Reply with quote

l'ho sto facendo
Code:
#!/bin/bash

#Menu
options[0]="CERCA"
options[1]="INSTALLA/DISINSTALLA PACCHETTI"
options[2]="GESTIONE USE FLAG"
options[3]="AGGIORNA SISTEMA"
options[4]="PULIZIA SISTEMA"
options[5]="ESCI"

#Menu loop
PS3=("CERCA :" "INSTALLA/DISINSTALLA PACCHETTI :" "GESTIONE USE FLAG :" "AGGIORNA SISTEMA :" "PULIZIA SISTEMA :" "ESCI :")
select opt in "${options[@]}"
    do
        case $opt in
"CERCA") {
    if [[ ${options[0]} ]]; then

PS3='SELEZIONA LA TUS SCELTA: '
 options=("Aggiorna Eix e Cerca " "Cerca Senza Aggiornare " "Menu" )
 select opt in "${options[@]}"
 do
     case $opt in
         "Aggiorna Eix e Cerca ")
        echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix-update
      eix $pack
   REPLY=
                 ;;
         "Cerca Senza Aggiornare ")
   echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix $pack
   REPLY=
                    ;;
   

         *) echo "esco"
MENU
;;
     esac
 done
fi
}
##########################################################
   case $opt in
 "INSTALLA/DISINSTALLA PACCHETTI") {
    if [[ ${choices[1]} ]]; then
   PS3='GESTIONE PACCHETTI: '
         options=("Installa da Portage Tree " "Installa da Overlays " "Rimuovi Pacchetto " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Installa da Portage Tree ")
             echo -n "pacchetto da installare " ; read INSTALLA
      emerge --ask $INSTALLA
      echo "eseguito"
REPLY=
                      ;;   
   
   "Installa da Overlays ")
   echo "devi prima scaricare l'ebuild"
   echo premi un tasto per continuare
   read -n1
   cd /home/trigg/Scaricati/G

   echo -n "Indica Categoria/Pacchetto " ; read rp
   ls

   echo -n "Inserisci .ebuild " ; read ebuild
   mkdir -p /usr/local/portage/$rp

   cp $ebuild /usr/local/portage/$rp
   #mv $ebuild /mnt/DATI/gentoo/'installazione gentoo'/ebuild/
   cd /usr/local/portage/$rp

   repoman manifest
   emerge --ask $rp
REPLY=
         ;;
   "Rimuovi Pacchetto ")
            echo -n "Indica categoria/pacchetto da rimuovere" ; read ctpr
       emerge --depclean --ask $ctpr
         echo "eseguito"
REPLY=
             ;;
   "Menu")
     break 1
       ;;

         *) echo opzione non valida;;
     esac
 done
   
    fi
}
#################################################
case $opt in   
"GESTIONE USE FLAG") {
 if [[ ${choices[2]} ]]; then
   PS3='GESTIONE USE-FLAG: '
         options=("Abilita Use-Flag " "Disabilita Use-Flag " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Abilita Use-Flag ")
             echo -n "Indica Categoria/Pacchetto da ricompilare" ; read cpt
   echo -n "Indica Use-flag da abilitare" ; read use
       euse --enable $use --package $cpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
REPLY=           
             ;;
   "Disabilita Use-Flag ")
      echo -n "Indica Categoria/Pacchetto da ricompliare" ; read dcpt
   echo -n "Indica Use-flag da disabilitare" ; read duse
       euse --disable $duse --package $dcpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
REPLY=             
             ;;
   "Menu")
           break 1
             ;;

         *) echo opzione non valida;;
     esac
 done
    fi
}
##########################################
case $opt in   
"AGGIORNA SISTEMA") {
if [[ ${choices[3]} ]]; then
   PS3='AGGIORNA SISTEMA: '
         options=("Aggiorna Portage Tree " "Aggiorna Pacchetti e Dipendenze " "Esegui emerge --update --newuse --deep @world " "Esegui emerge --ask --depclean " "Esegui emerge @preserved-rebuild " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Aggiorna Portage Tree ")
         emerge --sync
      echo "eseguito"
REPLY=             
                      ;;
   "Aggiorna Pacchetti e Dipendenze ")
echo "Stai per lanciare emerge --update --changed-use --deep --with-bdeps=y @world
Premi un Tasto per Continuare "
read -n1
emerge --update --changed-use --deep --with-bdeps=y @world
      echo "eseguito"
REPLY=             
                      ;;
   "Esegui emerge --update --newuse --deep @world ")
   emerge --update --newuse --deep @world
      echo "eseguito"
REPLY=             
                      ;;
   "Esegui emerge --ask --depclean ")
   emerge --ask --depclean
      echo "eseguito"
REPLY=             
                      ;;

   "Esegui emerge @preserved-rebuild ")
   emerge @preserved-rebuild
      echo "eseguito"
REPLY=             
                      ;;
   "Menu")
           break 1
             ;;

         *) echo opzione non valida;;
     esac
 done
    fi
}
#################################
case $opt in
"PULIZIA SISTEMA") {
    if [[ ${choices[4]} ]]; then
   PS3='PULIZIA DEL SISTEMA: '
         options=("Pulizia /var/tmp/portage " "Esegui eclean-dist " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Pulizia /var/tmp/portage ")
    echo "stai per eliminare le cartelle in /var/tmp/portage/  premi un tasto per continuare"
   read -n1
 /usr/bin/find /var/tmp/portage/  -mindepth 1 -maxdepth 1 -exec /bin/rm -rf {} +;
REPLY=   
             ;;   
   "Esegui eclean-dist ")
   
   echo "stai per eseguire eclean-dist premi un tasto per continuare"
    read -n1
   eclean-dist
REPLY=
;;
   "Menu")
           break 1
             ;;

         *) echo opzione non valida;;
     esac
 done

             
    fi
}
###################################
case $opt in
"ESCI") {
    if [[ ${choices[5]} ]]; then
exit

 fi
}


dovrei essere sulla buona strada
forse c'è qualche punteggiatura fuori luogo mi restituisce
Code:
 riga 218: errore di sintassi: EOF non atteso


vabbè con calma lo rielaborerò
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Mon Jul 16, 2018 5:31 pm    Post subject: Reply with quote

e ripeto :
Code:
 PS3=("CERCA :" "INSTALLA/DISINSTALLA PACCHETTI :" "GESTIONE USE FLAG :" "AGGIORNA SISTEMA :" "PULIZIA SISTEMA :" "ESCI :")


stai trattando una variabile di ambiente come una matrice


non ho guardato il resto
_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Mon Jul 16, 2018 7:17 pm    Post subject: Reply with quote

sarà la volta buona :) ?
allora ieri mi era venuta l'emicrania perchè mi usciva sempre

identificatore non valido

riscrivendo lo script ho tolto i segni / - dalle funzioni
e adesso sembra andare
Code:
1) Cerca            4) Aggiorna il Sistema
2) Installa_Disinstalla_Pacchetti  5) Pulizia di Sistema
3) Gestione_Use_Flag         6) Esci
Inserisci valore : 3
Seleziona il numero della tua scelta
1) Abilita Use-Flag
2) Disabilita Use-Flag
3) Menu
Inserisci valore : 3
Menu Principale
1) Cerca            4) Aggiorna il Sistema
2) Installa_Disinstalla_Pacchetti  5) Pulizia di Sistema
3) Gestione_Use_Flag         6) Esci
Inserisci valore :


ma come posso scrivere
Code:
 Installa Disinstalla Pacchetto
senza ricevere l'errore?
ho provato sia con gli apici che con le virgolette
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Mon Jul 16, 2018 8:04 pm    Post subject: Reply with quote

penso di averelo scritto già un paio di volte.


Ultima chance :
Due menu quasi completi (menu principale , sotto-menu di Installazione/Disinstallazione/Aggiorna)

Code:

#!/bin/bash
clear

## Opzioni per il menu
options=("Cerca" "Installa/Rimuovi Pacchetti" "Gestione USE Flag" "Pulizia sistema" "Esci")


## Dichiaro le varie funzioni

# Funzione richiamata spesso. Ricarica il titolo principale dal passaggio da un sub-menu all'altro
menutitle () {
                        clear
                        echo "Script di gestione *** $(uname -smr) ***"
                        echo
}

# Variante al titolo menu utilizzando here-document (EndOfFIle)
#menutitle () {
#cat <<EOF
#Script di gestione *** $(uname -smr) ***
# scrivi tutto quello che vuoi
# senza utilizzare "echo"
# con "EOF" si chiude il messaggio
#EOF
#}
###

cerca () {
            # Il seguente controllo imposta come programma di ricerca di default "eix"
            # Se "eix" non è installato passa al comando "emerge -s"
            if which eix ; then
                bsearch="$(which eix)"
            else
                bsearch="$(which emerge) -s"
            fi
            clear
            echo -n "Ricerca pacchetto : " ; read pkg
            echo
            # Per la ricerca si possono inserire valori multipli , se non viene indicato nulla viene visualizzato un messaggio.
            if [[ -z $pkg ]] ; then
                echo "Nessuna ricerca da effettuare."
            else
                # Questo ciclo controlla ogni variabile inserita (i pacchetti da cercare)
                # eix mostra un output limitato se i valori trovati superano un cero limite.
                # impostando un valore infinito mostrerà tutti i risultati.
                clear
                export EIX_LIMIT=0
                for i in $pkg ; do
                    $bsearch $i
                done
                echo -n "Premi un tasto per continuare" ; read $key
            fi
}

## Il Sottomenu per gestione dei pacchetti
menu_install () {
    clear
    echo "Menu di gestione pacchetti"
    echo
    menuopts=("Installa" "Rimuovi" "Aggiorna sistema" "Torna al menu")
        PS3="> "
        select mopt in "${menuopts[@]}"
            do
                case $mopt in
                    "${menuopts[0]}") echo "Installa pacchetto/i"
                        REPLY=
                    ;;
                    "${menuopts[1]}") echo "Rimuovi pacchetto/i"
                        REPLY=
                    ;;
                    "${menuopts[2]}") echo "Aggiorna il sistema"
                        REPLY=
                    ;;
                    "${menuopts[3]}") menutitle
                        break
                    ;;
                    *) REPLY=
                    ;;
                esac
            done
}
### Scrivi le altre funzioni
###
### Fine delle funzioni


# Il menu principale
menutitle
echo
PS3="> "
select opt in "${options[@]}"
    do
        case $opt in
            "${options[0]}")
                    clear
                    # Richiama la funzione "cerca" dichiarata precedentemente
                    cerca
                    REPLY=
            ;;
            "${options[1]}")
                    menu_install
                    REPLY=
            ;;
            # Continua con le altre funzioni inserendo le altre voci del menu utilizzando gli indici della matrice
            #
            "${options[-1]}") # Richiama l'ultimo indice (Uscita dallo script)
                    clear
                    exit
            ;;
        esac
    done

_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Tue Jul 17, 2018 6:30 am    Post subject: Reply with quote

finito
ieri avevo iniziato con questo schema
cioè con quello indicato da te all'inizio
la mia conoscenza sugli script è basata su vecchi tutorial letti on-line , o su topic presi qua e la per risolvere alcuni errori
però sono appassionato d'informatica e mi diverte fare queste cose .

ne farò un'altro tentando di inserire i tuoi comandi

questo è lo script , però non va ancora bene


Code:
#!/bin/bash
clear

# Controllo dei permessi di chi esegue lo script
if [ "$EUID" -ne 0 ]
  then echo "Eseguire lo script con i permessi di amministratore (su o sudo)"
  exit
fi

## Opzioni per il menu
options=("Cerca" "Installa Disinstalla Pacchetti" "Gestione Use-Flag" "Aggiorna il Sistema" "Pulizia di Sistema" "Esci")


## Dichiaro le varie funzioni

Cerca () {
echo "Seleziona il numero della tua scelta"
 options=("Aggiorna Eix e Cerca " "Cerca Senza Aggiornare " "Menu" )
 select opt in "${options[@]}"
 do
     case $opt in
         "Aggiorna Eix e Cerca ")
        echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix-update
      eix $pack
   REPLY=
                 ;;
         "Cerca Senza Aggiornare ")
   echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix $pack
   REPLY=
                    ;;
*) echo "Menu Principale"
break
       ;;
     esac
 done
}

Installa_Disinstalla_Pacchetti () {
echo "Seleziona il numero della tua scelta"
 options=("Installa da Portage Tree " "Installa da Overlays " "Rimuovi Pacchetto " "Menu" )
 select opt in "${options[@]}"
 do
     case $opt in
         "Installa da Portage Tree ")
             echo -n "pacchetto da installare " ; read INSTALLA
      emerge --ask $INSTALLA
      echo "eseguito"
   REPLY=
                 ;;
   "Installa da Overlays ")
   echo "devi prima scaricare l'ebuild"
   echo premi un tasto per continuare
   read -n1
   cd /home/trigg/Scaricati/G

   echo -n "Indica Categoria/Pacchetto " ; read rp
   ls

   echo -n "Inserisci .ebuild " ; read ebuild
   mkdir -p /usr/local/portage/$rp

   cp $ebuild /usr/local/portage/$rp
   #mv $ebuild /mnt/DATI/gentoo/'installazione gentoo'/ebuild/
   cd /usr/local/portage/$rp

   repoman manifest
   emerge --ask $rp
REPLY=
         ;;
   "Rimuovi Pacchetto ")
            echo -n "Indica categoria/pacchetto da rimuovere" ; read ctpr
       emerge --depclean --ask $ctpr
         echo "eseguito"
REPLY=
             ;;
   "Rimuovi Pacchetto ")
            echo -n "Indica categoria/pacchetto da rimuovere" ; read ctpr
       emerge --depclean --ask $ctpr
         echo "eseguito"
REPLY=
             ;;
*) echo "Menu Principale"
break
       ;;
     esac
 done
}

Gestione_Use_Flag () {
echo "Seleziona il numero della tua scelta"
         options=("Abilita Use-Flag " "Disabilita Use-Flag " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Abilita Use-Flag ")
             echo -n "Indica Categoria/Pacchetto da ricompilare" ; read cpt
   echo -n "Indica Use-flag da abilitare" ; read use
       euse --enable $use --package $cpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
REPLY=           
             ;;
   "Disabilita Use-Flag ")
      echo -n "Indica Categoria/Pacchetto da ricompliare" ; read dcpt
   echo -n "Indica Use-flag da disabilitare" ; read duse
       euse --disable $duse --package $dcpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
REPLY=             
             ;;
*) echo "Menu Principale"
break
       ;;
     esac
 done
}

Aggiorna () {
echo "Seleziona il numero della tua scelta"
         options=("Aggiorna Portage Tree " "Aggiorna Pacchetti e Dipendenze " "Esegui emerge --update --newuse --deep @world " "Esegui emerge --ask --depclean " "Esegui emerge @preserved-rebuild " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Aggiorna Portage Tree ")
         emerge --sync
      echo "eseguito"
REPLY=             
                      ;;
   "Aggiorna Pacchetti e Dipendenze ")
echo "Stai per lanciare emerge --update --changed-use --deep --with-bdeps=y @world
Premi un Tasto per Continuare "
read -n1
emerge --update --changed-use --deep --with-bdeps=y @world
      echo "eseguito"
REPLY=             
                      ;;
   "Esegui emerge --update --newuse --deep @world ")
   emerge --update --newuse --deep @world
      echo "eseguito"
REPLY=             
                      ;;
   "Esegui emerge --ask --depclean ")
   emerge --ask --depclean
      echo "eseguito"
REPLY=             
                      ;;

   "Esegui emerge @preserved-rebuild ")
   emerge @preserved-rebuild
      echo "eseguito"
            ;;
*) echo "Menu Principale"
break
       ;;
     esac
 done
}

Pulizia () {
echo "Seleziona il numero della tua scelta"
         options=("Pulizia /var/tmp/portage " "Esegui eclean-dist " "Menu" )
    select opt in "${options[@]}"
    do
     case $opt in
   "Pulizia /var/tmp/portage ")
    echo "stai per eliminare le cartelle in /var/tmp/portage/  premi un tasto per continuare"
   read -n1
 /usr/bin/find /var/tmp/portage/  -mindepth 1 -maxdepth 1 -exec /bin/rm -rf {} +;
REPLY=   
             ;;   
   "Esegui eclean-dist ")
   
   echo "stai per eseguire eclean-dist premi un tasto per continuare"
    read -n1
   eclean-dist
REPLY=
;;
*) echo "Menu Principale"
break
       ;;
     esac
 done
}
### Scrivi le altre funzioni
###
### Fine delle funzioni


# Il menu
clear
PS3="Inserisci valore : "
select opt in "${options[@]}"
    do
        case $opt in
            "${options[0]}")
                    clear
                    # Richiama la funzione "cerca" dichiarata precedentemente
                    Cerca
                    REPLY=
            ;;
            "${options[1]}")
                   Installa_Disinstalla_Pacchetti
                    REPLY=
            ;;
            "${options[2]}")
                   Gestione_Use_Flag
                    REPLY=
            ;;
            "${options[3]}")
                   Aggiorna
                    REPLY=
            ;;
            "${options[4]}")
                   Pulizia
                    REPLY=
            ;;
            # Continua con le altre funzioni
            #
            "${options[-1]}") # Richiama l'ultimo indice (Uscita dallo script)
                    clear
                    exit
            ;;
        esac
    done
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Tue Jul 17, 2018 7:36 am    Post subject: Reply with quote

fatto!!!

non ci sarei mai arrivato senza il tuo aiuto erano mesi che spulciavo internet per i sub
grazie sabayonino

lo script

Code:
#!/bin/bash
clear

# Controllo dei permessi di chi esegue lo script
if [ "$EUID" -ne 0 ]
  then echo "Eseguire lo script con i permessi di amministratore (su o sudo)"
  exit
fi

############## Opzioni per il menu ##########################

options=("Cerca" "Installa Disinstalla Pacchetti" "Gestione Use-Flag" "Aggiorna il Sistema" "Pulizia di Sistema" "Esci")

################### subcerca ######################

Cerca () {
echo "Seleziona il numero della tua scelta"
 cerca=("Aggiorna Eix e Cerca " "Cerca Senza Aggiornare " "Menu" )
PS3="> "
 select mopt in "${cerca[@]}"
 do
     case $mopt in
         "${cerca[0]}") echo "Aggiorna Eix e Cerca "
        echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix-update
      eix $pack
   REPLY=
                 ;;
         "${cerca[1]}")  echo "Cerca Senza Aggiornare "
   echo -n "Quale pacchetto desideri cercare? " ; read pack
      eix $pack
   REPLY=
                    ;;
   "${cerca[2]}") echo "Menu Principale"
break
       ;;
*) REPLY=
;;
     esac
 done
}

###################################### Sub Pacchetti ############################

Installa_Disinstalla_Pacchetti () {
echo "Seleziona il numero della tua scelta"
 pacchetti=("Installa da Portage Tree " "Installa da Overlays " "Rimuovi Pacchetto " "Menu" )
PS3="> "
select mopt in "${pacchetti[@]}"
 do
     case $mopt in
         "${pacchetti[0]}") echo "Installa da Portage Tree "
             echo -n "pacchetto da installare " ; read INSTALLA
      emerge --ask $INSTALLA
      echo "eseguito"
   REPLY=
                 ;;
   "${pacchetti[1]}") echo "Installa da Overlays "
   echo "devi prima scaricare l'ebuild"
   echo premi un tasto per continuare
   read -n1
   cd /home/trigg/Scaricati/G

   echo -n "Indica Categoria/Pacchetto " ; read rp
   ls

   echo -n "Inserisci .ebuild " ; read ebuild
   mkdir -p /usr/local/portage/$rp

   cp $ebuild /usr/local/portage/$rp
   #mv $ebuild /mnt/DATI/gentoo/'installazione gentoo'/ebuild/
   cd /usr/local/portage/$rp

   repoman manifest
   emerge --ask $rp
REPLY=
         ;;
   "${pacchetti[2]}") echo "Rimuovi Pacchetto "
            echo -n "Indica categoria/pacchetto da rimuovere" ; read ctpr
       emerge --depclean --ask $ctpr
         echo "eseguito"
REPLY=
             ;;

"${pacchetti[3]}") echo echo "Menu Principale"
break
       ;;
*) REPLY=
;;
     esac
 done
}

########################### Gestione Use Flag #################################

Gestione_Use_Flag () {
echo "Seleziona il numero della tua scelta"
         Use_Flag=("Abilita Use-Flag " "Disabilita Use-Flag " "Menu" )
PS3="> "
    select mopt in "${Use_Flag[@]}"
    do
     case $mopt in
   "${Use_Flag[0]}") echo "Abilita Use-Flag "
             echo -n "Indica Categoria/Pacchetto da ricompilare" ; read cpt
   echo -n "Indica Use-flag da abilitare" ; read use
       euse --enable $use --package $cpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
REPLY=           
             ;;
   "${Use_Flag[1]}") echo "Disabilita Use-Flag "
      echo -n "Indica Categoria/Pacchetto da ricompliare" ; read dcpt
   echo -n "Indica Use-flag da disabilitare" ; read duse
       euse --disable $duse --package $dcpt
         emerge --ask --changed-use --deep @world   
         echo "eseguito"
REPLY=             
             ;;
"${Use_Flag[2]}") echo echo "Menu Principale"
break
       ;;
*) REPLY=
;;
     esac
 done
}

######################################### Aggiorna ###############################

Aggiorna () {
echo "Seleziona il numero della tua scelta"
         aggiorna=("Aggiorna Portage Tree " "Aggiorna Pacchetti e Dipendenze " "Esegui emerge --update --newuse --deep @world " "Esegui emerge --ask --depclean " "Esegui emerge @preserved-rebuild " "Menu" )
PS3="> "
    select mopt in "${aggiorna[@]}"
    do
     case $mopt in
   "${aggiorna[0]}") echo "Aggiorna Portage Tree "
         emerge --sync
      echo "eseguito"
REPLY=             
                      ;;
   "${aggiorna[1]}") echo "Aggiorna Pacchetti e Dipendenze "
echo "Stai per lanciare emerge --update --changed-use --deep --with-bdeps=y @world
Premi un Tasto per Continuare "
read -n1
emerge --update --changed-use --deep --with-bdeps=y @world
      echo "eseguito"
REPLY=             
                      ;;
   "${aggiorna[2]}") echo "Esegui emerge --update --newuse --deep @world "
   emerge --update --newuse --deep @world
      echo "eseguito"
REPLY=             
                      ;;
   "${aggiorna[3]}") echo "Esegui emerge --ask --depclean "
   emerge --ask --depclean
      echo "eseguito"
REPLY=             
                      ;;

   "${aggiorna[4]}") echo "Esegui emerge @preserved-rebuild "
   emerge @preserved-rebuild
      echo "eseguito"
            ;;
"${aggiorna[5]}") echo echo "Menu Principale"
break
       ;;
*) REPLY=
;;
     esac
 done
}

################################### Pulizia ##############################

Pulizia () {
echo "Seleziona il numero della tua scelta"
         pulizia=("Pulizia /var/tmp/portage " "Esegui eclean-dist " "Menu" )
PS3="> "
    select mopt in "${pulizia[@]}"
    do
     case $mopt in
   "${pulizia[0]}") echo "Pulizia /var/tmp/portage "
    echo "stai per eliminare le cartelle in /var/tmp/portage/  premi un tasto per continuare"
   read -n1
 /usr/bin/find /var/tmp/portage/  -mindepth 1 -maxdepth 1 -exec /bin/rm -rf {} +;
REPLY=   
             ;;   
   "${pulizia[1]}") echo  "Esegui eclean-dist "
   
   echo "stai per eseguire eclean-dist premi un tasto per continuare"
    read -n1
   eclean-dist
REPLY=
;;
"${pulizia[2]}") echo echo "Menu Principale"
break
       ;;
*) REPLY=
;;
     esac
 done
}
### Scrivi le altre funzioni
###
### Fine delle funzioni


# Il menu
clear
PS3="Inserisci valore : "
select opt in "${options[@]}"
    do
        case $opt in
            "${options[0]}")
                    clear
                    # Richiama la funzione "cerca" dichiarata precedentemente
                    Cerca
                    REPLY=
            ;;
            "${options[1]}")
                   Installa_Disinstalla_Pacchetti
                    REPLY=
            ;;
            "${options[2]}")
                   Gestione_Use_Flag
                    REPLY=
            ;;
            "${options[3]}")
                   Aggiorna
                    REPLY=
            ;;
            "${options[4]}")
                   Pulizia
                    REPLY=
            ;;
            # Continua con le altre funzioni
            #
            "${options[-1]}") # Richiama l'ultimo indice (Uscita dallo script)
                    clear
                    exit
            ;;
        esac
    done
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Tue Jul 17, 2018 10:35 am    Post subject: Reply with quote

al posto di "break" (che interrompe il ciclo del sottomenu) si potrebbe utilizzare
Code:
return

che riporta al codice dove la funzione è stata chiamata (in questo caso il menu principlae)
ma return lo utilizzerei nel caso dovessi riportare/utilizzare lo stato di uscita della funzione

return 0 se vero
return 1 se falso

Poi gli script possono essere complessi o emplici comandi , dipende uno cosa vuole ottenere (e come )
Si possono ottenere gli stessi risultati in modo diverso ( a seconda delle proprie conoscenze)

se vuoi divertirti a leggere http://www.tldp.org/LDP/abs/html/index.html (ultima revisione , 2014

o magari leggerti qualche script bash del sistema operativo ... cercando di capire cosa fa,
_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Wed Jul 18, 2018 7:31 am    Post subject: Reply with quote

sto leggendo il tutorial
adesso prverò a migliorare lo script arricchendolo e completandolo

adesso per esempio ho capito quale funzione ha "PS3> " nel submenu

dovrebbe significare PS3 equivale a "tutto quello che viene dopo all'interno dell'argomento"
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Wed Jul 18, 2018 10:12 am    Post subject: Reply with quote

no. è il titolo che puoi impostare alla prompt di "eselect".
ti avevo lasciato il link ed il significato di PS1,PS2,PS3,PS4 nella bash
_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Wed Jul 18, 2018 10:20 am    Post subject: Reply with quote

in effetti ho steccato di brutto .

solo dopo mi son reso conto della baggianata che ho detto

sto elaborando un nuovo script quando lo finirò lo posterò per altri suggerimenti o correzioni
leggendo mi arriverà la giusta ispirazione
Back to top
View user's profile Send private message
trigg
Apprentice
Apprentice


Joined: 14 Jun 2018
Posts: 179

PostPosted: Wed Jul 18, 2018 8:17 pm    Post subject: Reply with quote

e alla fine grazie alle dritte
sono riuscito a fare lo script che aveva nella testa :)

TRIGG.sh GENTOO TERMINAL MANAGER
Back to top
View user's profile Send private message
sabayonino
l33t
l33t


Joined: 03 Jan 2012
Posts: 623

PostPosted: Wed Jul 18, 2018 9:18 pm    Post subject: Reply with quote

niente più "select" ?

a prima vista , troppi

if
else
fi
else

i quali potrebbero portare ad errori di sintassi
...

puoi raggrupparli con :

Code:
if [ condizioone 1 ] ; then
    operazione 1
elif [condizione 2 ] ; then
    operazione 2
elif [condizione 3 ] ; then
    operazione 3
[...]
else [condizione N ] ; then
     operazione N
fi

in questo caso , "case stantment" ci stava

su "read" puoi inserire la risposta accanto al testo e non alla riga successiva (ma vedo che l'hai nascosta)
Code:
echo -n "test" ; read ...


tutti quegli echo... , come alternativa (non è un obbligo) "here-document" (puoi inserire variabili )
Code:
cat <<EOF
+---------------- G E N T O O  -----------------------+
| bla                                                                 |
| bla $(testo)  ${GREEN} $messaggio_colorato    |
| Kernel $(uname -r)                                          |
| bla bla                                                            |
+--------------------------------------------------------+
EOF


Mancano dei controlli nelle USE
se non inserisci nulla , verranno inserite TUTTE le USE nel make.conf
qualcosa del tipo

Code:
if [[ -z $REPLY ]] ; then
           echo "scelta non valida"
fi



Un controllo nelle voci del menu che siano numeri e non lettere
Code:
if [[ $a != [0-9*] ]] ; then
 echo "la scelta non è un numero"
 fi


ma poi dovresti controllare che il numero corrisponda ... se metto 101 ?
o ti crei un costrutto che faccia tutto questo oppure ritorni al "case"

Code:
case opt in
1) operazione 1
;;
2)  operazione 2
;;
3)...operazione 3
[4-9]) le operazioni dal range 4-9 -->operazione alternativa
;;
*) tutto il resto  (numeri stringhe spazi ) -->altra operazione
;;
esac



il
Code:
echo -e ${GREEN}

in linea di massima basta la prima volta , se devi ricambiare colore , inserisci il nuovo codice con la nuova riga (o all'interno della stessa string)
Code:
 echo -e "${GREEN}La ${WHITE}Bandiera ${RED}Italiana $[DEFAULT} o tricolore"

_________________
BOINC ed il calcolo distribuito
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum