# suggerimento script gentoo

## trigg

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

```
#!/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 ^_^

----------

## sabayonino

```
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 

```
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

```

```
man eix
```

----------

## fedeliallalinea

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

----------

## trigg

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  :Smile: 

anche se mi piacerebbe creare il sub menu nell'opzione aggiorna sistema

dove si può scegliere liberamente il comando da lanciare

```
#!/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
```

 :Smile:  più di così posso solo modificare l'aspetto dello script ,per andare oltre dovrò approfondire bin bash  :Smile: Last edited by trigg on Sat Jul 14, 2018 6:24 pm; edited 1 time in total

----------

## sabayonino

se le opzioni di scelta le hai dichiarate in una matrice 

```
 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

```
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

```

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"

```

## Dichiara la funzione di ricerca

fricerca () {

   ...il codice della funzione cerca ...

}

```

poi in esec richiami la funzione

```

case opt in ${options[@]}

 do

   "${options[0]}") fricerca

 ;;

   "${options[1]}")  <funzione2>

;;

[...]

esac

```

se vuoi mantenere il loop di case eliminado il "while"

puoi inserire 

```
REPLY=
```

alla fine di ogni condizione ( a parte quella di uscita)

```
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

----------

## trigg

ci proverò 

domani a mente fresca farò delle prove

grazie per le dritte  :Smile: 

----------

## sabayonino

ti dò una spintarella...

```
#!/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

```
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

```

----------

## trigg

ok dopo un giorno di emicrania penso di aver capito

questo è l'inizio la cosa che manca è tornare al menu principale dal sub menu

```

#!/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

```

----------

## sabayonino

La matrice era corretta anche prima ,

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

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

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

```

function NOME {

codice

}

```

Ora come le ho indicate 

```

nome () {

codice

}

```

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

un suggerimento 

quando vuoi indicare all' outpud a video un messaggio  , utilizza sempre i doppi apici

```
echo "messaggio messaggio2"
```

Evita

```
 echo messaggio messagio2
```

Per scopi didattici può anche starci lo script , ma la gestione io la preferisco alla vecchia maniera , manuale.   :Twisted Evil:  anche perchè le situazioni non sono sempre uguali.

----------

## trigg

error indica una selezione sbagliata

```
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

----------

## sabayonino

ti basta un

```

*) 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...

----------

## trigg

ora lo sto rifacendo ma non ne vengo a capo

un'altra emicrania all'orizzonte   :Confused: 

```
#!/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

```
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 :

```

----------

## sabayonino

 :Twisted Evil: 

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\$ ''.
> ...

 

----------

## trigg

l'ho sto facendo

```
#!/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

```
 riga 218: errore di sintassi: EOF non atteso
```

vabbè con calma lo rielaborerò

----------

## sabayonino

e ripeto :

```
 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

----------

## trigg

sarà la volta buona  :Smile:  ?

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

```
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 

```
 Installa Disinstalla Pacchetto
```

 senza ricevere l'errore?

ho provato sia con gli apici che con le virgolette

----------

## sabayonino

penso di averelo scritto già un paio di volte.

Ultima chance :

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

```

#!/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

```

----------

## trigg

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

```
#!/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 

```

----------

## trigg

fatto!!! 

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

grazie sabayonino

lo script 

```
#!/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 

```

----------

## sabayonino

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

```
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,

----------

## trigg

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"

----------

## sabayonino

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

----------

## trigg

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

----------

## trigg

e alla fine grazie alle dritte

sono riuscito a fare lo script che aveva nella testa  :Smile: 

TRIGG.sh GENTOO TERMINAL MANAGER

----------

## sabayonino

niente più "select" ?

a prima vista , troppi 

if

else

fi

else

i quali potrebbero portare ad errori di sintassi

...

puoi raggrupparli con :

```
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)

```
echo -n "test" ; read ...
```

tutti quegli echo... , come alternativa (non è un obbligo)   "here-document" (puoi inserire variabili )

```
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

```
if [[ -z $REPLY ]] ; then 

           echo "scelta non valida"

fi

```

Un controllo nelle voci del menu che siano numeri e non lettere

```
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" 

```
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 

```
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)

```
 echo -e "${GREEN}La ${WHITE}Bandiera ${RED}Italiana $[DEFAULT} o tricolore"
```

----------

## trigg

mi faccio una ricerca su  case statement

che non conosco e non ho mai usato

se devo riscrivere qualcosa mi piacerebbe usare  case statement.

-quando usersò elif , comedevo fare con fi ?

basta un endif oppure devo chiudere con fi moltiplicato if?

----------

## sabayonino

case stantment  è "case". te l'ho anche scritto con un esempio

idem con esempio per

if

elif

elif

[...]

fi

o

if

elif

elif

[...]

else

fi

i "if , else , fi "  troppo nidificati possono portare a problemi di logica e sono brutti da vedere  :Mr. Green:   (poi...degustibus)

devi ragionare in cascata...

----------

## trigg

manca solo 

```
if [[ -z $REPLY ]] ; then 

           echo "scelta non valida" 

fi 
```

che non ho capito come impostarlo

TRIGG.sh GENTOO TERMINAL MANAGER 

dopo non so se mancano altri comandi gentoo di base che sto ignorando completamente

----------

## antonellocaroli

ciao

questo é un esempio di una funzione per una scelta di un valore, dando una corrispondenza sbagliata t avvisa che non ahi scelto bene e ti rimanda alla scelta

```
function select_sample_rate() {

  declare -a rates=(   \

   '44100'      \

   '48000'      \

   '88200'      \

   '96000'      \

   '176400'   \

   '192000'   \

   '352800'   \

   '384000'   \

  )

  # no existing hardware support for '705600' and '768000'.

  if [ "$1" == "" ]; then 

    local prompt='Selezionare un sample rate:'

  else

    local prompt="$1"

  fi

  sample_rate=""

  while [ "$sample_rate" == "" ]

  do

    clear

    echo -e "\n$prompt\n"

    for (( i = 0 ; i < ${#rates[@]} ; i++ ))

    do

      echo -e "$i) \t${rates[$i]}";

    done

    echo

    read -p 'Digitare il numero corrispondente e premere invio: ' choice

    echo

    if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -lt ${#rates[@]} ]; then

      sample_rate="${rates[$choice]}"

      echo -e "Scelta effettuata: '$sample_rate'\n"

      read -s -N1 -p 'Confermare e procedere? (s/N)'

      clear

      echo

      [ "$REPLY" != "s" ] && sample_rate=""

    else

      echo -e "\a\nErrore: digitare un numero compreso tra 0 e $[ ${#rates[@]}-1 ]."

      pausa

    fi

  done

}

```

questo un esempio per il controllo dell'utente

```
function run_as_root() {

  [ "$(whoami)" == "root" ] || { 

    echo -e '\a\nATTENZIONE: questo script deve essere eseguito dal "SuperUser" (utente root).'

    exec su -c "$0"

  }

}

```

questa la pausa che viene richiamate quando serve

```
function pausa() {

  echo

  read -s -p 'Premere "Invio" per continuare...'

  clear

  echo

}
```

spero ti possono essere da spunto

----------

## trigg

ciao antonello

ho letto più volte lo script

e  mi son perso qui

```
 for (( i = 0 ; i < ${#rates[@]} ; i++ )) 
```

non conosco i caratteri speciali come ++

e non ho ancora chiaro il significato di i z n 

però sto imparando

approfondirò lo script per capire di più  :Smile: 

----------

## sabayonino

tipica punteggiature del C++

equivale a 

```
for i in ${rates[@]} ; do [...] ; done
```

o comunemente detti cicli

```
for i in 1 2 3 4 5 ; do echo $i ; done

1

2

3

4

5

```

```
for e in {0..5} ; do echo $e ; done

0

1

2

3

4

5

```

```
for t in mio tuo suo loro ; do echo $t ; done

mio

tuo

suo 

loro

```

In una cartella contenente *.mp3

```
for i in *.mp3 ; do echo $i ; done

01_tunderstruck.mp3

02_bruce_springsteen_the_river.mp3

05_dire_straits_on_every_streets.mp3

```

di modi ce ne sono parecchi

function run_as_root () {

codice

}

come scritto in precedenza ,è la dichiarazioe di funzione delle vecchie versioni di bash , seppur ancora compatibili , attualmente 

```
run_as_root ()

codice

}

```

----------

## trigg

 *Quote:*   

> n una cartella contenente *.mp3 
> 
> Codice:
> 
> for i in *.mp3 ; do echo $i ; done 
> ...

 

quindi lo potrei usare per cercare file per estensione e catalogarli

è la prima cosa che mi è venuta in mente

forse la più semplice   :Crying or Very sad: 

quindi quando leggo for n è come leggere for x 

oppure ci sono lettere che hanno un valore/significato definito   :Confused: 

----------

## sabayonino

"n" "x" "ciccio" , sono solo delle variabili che prenderanno un determinato valore all'interno del ciclo.

conta da 1 a 5

```
for i in {1..5} ; do echo $i ; done
```

for : inizio ciclo

i : imposta la variabile "i" a prendere il primo valore

in : all'interno dell'espressione che segue (nell'esempio : 1)

do echo $i : stampane il relativo valore (1)

done ; fine del primo ciclo , prosegui aumentando "i" al valore successivo (2)

riprende il for ... e via così

ci possono essere esemi più complessi

imposta la Matrice A

A=(1,2,3,4,5)

```
 for  ciccio in ${A[@]} ; do echo $ciccio ; done
```

stampa in sequenza i valori della matrice (dal primo all'ultimo) utilizando "ciccio" come variabile

A[0] = 1

A[1] = 2

...

Stampa elenco direcotry  vuote della cartella home (l'esempio non ha senso perchè basta il solo comando find , ma è per rendere l'idea

```
for d in "$(find /home/user -type d -empty)" ; do echo $d ; done
```

----------

## trigg

ricevuto

grazie sabayonino

mi sarà più facile leggere i tutorial e vabbè chissà quando farò uno script bello e complesso

intanto ci provo  :Smile: 

----------

## sabayonino

sul web di esempi ce ne sono una montagna

https://www.cyberciti.biz/faq/bash-for-loop/

https://www.tutorialkart.com/bash-shell-scripting/bash-for-loop/

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html

...

cerca "for statement" (dichiarazione per "for")

----------

## trigg

https://paste.pound-python.org/show/Rvb8f1O0PXQEAsTIs2xT/

sopra il link dello script

ho aggiunto il comando per layman nella sezione Installa Rimuovi App

di seguito le istruzioni aggiunte

 :Smile: 

```
4)

echo -e " Vuoi Aggiungere una voce Overlays? 

Premi [S] per confermare , un'altro tasto per proseguire :>"

read -sn 1

if [ "$REPLY" = "s" -o  "$REPLY" = "S" ]

   then

read -p "aggiungi Overlay >" overlays

a="layman -a  $overlays"

for i in  "$a"

do

$i

done

echo "Voce correttamente aggiunta"

read -p "Indica Categoria/Pacchetto da Installare >" install

b="emerge --ask $install"

for c in "$b"

do

$c 

done

else

read -p "Indica Categoria/Pacchetto da Installare >" instal

bb="emerge --ask $instal" 

 for d in "$bb" 

 do 

 $d  

 done

fi

;;
```

----------

## sabayonino

```
 if [[ "${REPLY}" == [Ss][Ii] || ${REPLY} == [Ss] ]] ; then ....
```

Accetta tutte le combinazioni "Si" "SI" "si" "sI" o di "S" "s"

http://mywiki.wooledge.org/BashFAQ/031

http://mywiki.wooledge.org/ArithmeticExpression

----------

## trigg

a proposito di layman

ho notato che con eix quando cerco un pacchetto

ricevo una lista infinita di pacchetti

quindi preferisco ogni volta eliminare il repository una volta installato il pacchetto

di conseguenza ho modificato il mio script

così

```
4)

echo -e " Vuoi Aggiungere una voce Overlays? 

Premi [S] per confermare , un'altro tasto per proseguire :>"

read -sn 1

if [ "$REPLY" = "s" -o  "$REPLY" = "S" ]

   then

read -p "aggiungi Overlay >" overlays

a="layman -a  $overlays"

for i in  "$a"

do

$i

done

echo "Voce correttamente aggiunta"

layman -S

echo "Voce correttamente aggiornata"

read -p "Indica Categoria/Pacchetto da Installare >" install

b="emerge --ask $install"

for c in "$b"

do

$c 

done

echo -e " Vuoi rimuovere la voce Overlays aggiunta prima? 

Premi [Y] per confermare , un'altro tasto per proseguire :>"

read -sn 1

if [ "$REPLY" = "y" -o  "$REPLY" = "Y" ]

   then

layman -d $overlays

echo -e "Overlays rimosso correttamente"

else 

app

fi

else

read -p "Indica Categoria/Pacchetto da Installare >" instal

bb="emerge --ask $instal" 

 for d in "$bb" 

 do 

 $d  

 done

fi

 

echo

echo -e "${YELLOW} !!! ESEGUITO !!! "

echo

echo -e "${LCYAN} premi un tasto per continuare" ; read -n1 ; app ;;
```

cos' da poter eliminare il repository ed avere più controllo sui pacchetti.

anche se avrei voluto impostare lo script in con questa logica

```
 echo -e " Vuoi Aggiungere una voce Overlays? premi invio se non vuoi aggiungerlo altrimenti scrivi il repository da aggiungere 
```

che dovrebbe tradursi in 

 if [ "$1" == "" ]; then 

passa ad installare

altrimenti aggiungi repo

----------

## sabayonino

ricevi più pacchetti perchè le stesse versioni di un pacchetto possono essere presenti sia in portage che in overlay , magari con USE differenti oppure per questioni di dipendenze

Non ha senso rimuoverlo. se aggiorni "eix" rimuovi anche l'elenco pacchetti dell'overlay

"eix" permette la ricerca anche nel singolo overlay

ti suggerisco di leggere l'help di "eix"

```
 -O, --overlay                    Match packages from overlays

    --in-overlay OVERLAY             Match packages from OVERLAY

```

----------

## trigg

quante cose ci sono da sapere su gentoo .

una domanda su sabayon

quando ho usato sabayon , la mia critica a riguardo era il fatto che non disponeva di molti pacchetti

ad esempio youtibedl-gui 

se uso questo script per sabayon

non usando rigo , entropy  ed equo 

ma usando solo emerge e portage cosa succede?

la domanda vera è

posso utilizzare overlay in sabayon usando layman ?

ad esempio questo è youtube-del-gui

http://gpo.zugaina.org/media-sound/mps-youtube

il repository riguradano gentoo e funtoo

e questo è il repo di sabayon

http://gpo.zugaina.org/Overlays/sabayon-distro

ma non c'è youtube-dl-gui

se uso lo script per sabayon cosa succede?

----------

## fedeliallalinea

Non posso aiutarti con sabayon non l'ho mai usata.

Per questioni di sabayon ti chiedo di aprire un thread nel Forum di discussione italiano visto che qui ci vanno solo le discussioni riguardanti Gentoo.

----------

## sabayonino

Qui andiamo OT , 

Sabayon ha un suo forum di assistenza , IRC e Wiki.

L'utilizzo di portage è possibile ma non è ufficialmente supportato nel senso che puoi ritrovarti con nessuno che ti dia una mano se non ti sai districare nelle situazioni che ne vengono fuori

Il package manager ufficiale è Entropy

Layman ,Portage ,rpm,installazione da sorgenti ... tutto è possibile.

https://wiki.sabayon.org/index.php?title=HOWTO:_Safely_mix_Entropy_and_Portage

----------

## trigg

una piccola modifica  :Smile: 

```
echo "devi prima scaricare l'ebuild"

echo "premi un tasto per continuare" ; read -n1

cd /home/trigg/Scaricati/

read -p "Indica categoria/pacchetto :>" dir

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

for ebld in *.ebuild

do

cp $ebld /usr/local/portage/$dir

mv $ebld /mnt/DATI/gentoo/'installazione gentoo'/ebuild/

cd /usr/local/portage/$dir

repoman manifest

emerge --ask $dir

done
```

adesso basterà solo scaricare l'ebuild ed indicare categoria/pacchetto 

inoltre è stata aggiunta l'opzione etc-update qualora  fosse richiesta 

di seguito il link

trigger gentoo termianl manager update

per sabayon ok , è solo che è stata la distro che mi ha avvicinato a linux 3 o 4 anni fa

dovrei avere ancora il cd che non sono mai riuscito a far partire , così son passato a kubuntu 

a settembre con il ritorno del fresco ho l'intenzione di installare sabayon e vabbè se dovrò far domande le farò sul forum di sabayon

----------

## zar Marco

Ero curioso di provare il tuo script, graficamente è gratificante. 

Per ora sembra fatto molto bene, mi riservo di provarlo un pò in questi giorni, ma sembra proprio un ottimo lavoro

----------

## zar Marco

Sto smanettando un po' con il tuo script, è fatto molto bene, ho provato ad aggiunger,e l'aggiornamento del portage tree in cerca app, ma è una rindondanza. 

Poi volevo sapere se era possibile inserire la ricerca di eix via categorie, e sono riuscito, però effettivamente non è molto utile senza autocompletamento. Secondo voi è possibile implementare tale funzione in uno script? 

A titolo puramente informativo, non voglio rubare il lavoro di nessuno

----------

