View previous topic :: View next topic |
Author |
Message |
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Sat Jul 14, 2018 2:30 pm Post subject: suggerimento script gentoo |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Sat Jul 14, 2018 3:21 pm Post subject: |
|
|
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
|
_________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 30888 Location: here
|
Posted: Sat Jul 14, 2018 3:36 pm Post subject: |
|
|
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 |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Sat Jul 14, 2018 6:02 pm Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Sat Jul 14, 2018 6:20 pm Post subject: |
|
|
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
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 _________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Sat Jul 14, 2018 6:27 pm Post subject: |
|
|
ci proverò
domani a mente fresca farò delle prove
grazie per le dritte |
|
Back to top |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Sat Jul 14, 2018 7:12 pm Post subject: |
|
|
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
|
_________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Mon Jul 16, 2018 8:04 am Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Mon Jul 16, 2018 10:44 am Post subject: |
|
|
La matrice era corretta anche prima ,
VAL[X] era solo per farti capire come viene gestita la matrice. e utilizzarlo nel costrutto "case"
(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
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. anche perchè le situazioni non sono sempre uguali. _________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Mon Jul 16, 2018 11:01 am Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Mon Jul 16, 2018 11:11 am Post subject: |
|
|
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... _________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA
Last edited by sabayonino on Mon Jul 16, 2018 11:26 am; edited 1 time in total |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Mon Jul 16, 2018 11:18 am Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Mon Jul 16, 2018 11:36 am Post subject: |
|
|
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 ``+ ''. |
_________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Mon Jul 16, 2018 12:08 pm Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Mon Jul 16, 2018 5:31 pm Post subject: |
|
|
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 _________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Mon Jul 16, 2018 7:17 pm Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Mon Jul 16, 2018 8:04 pm Post subject: |
|
|
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
|
_________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Tue Jul 17, 2018 6:30 am Post subject: |
|
|
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 |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Tue Jul 17, 2018 7:36 am Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Tue Jul 17, 2018 10:35 am Post subject: |
|
|
al posto di "break" (che interrompe il ciclo del sottomenu) si potrebbe utilizzare
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, _________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Wed Jul 18, 2018 7:31 am Post subject: |
|
|
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 |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Wed Jul 18, 2018 10:12 am Post subject: |
|
|
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 _________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Wed Jul 18, 2018 10:20 am Post subject: |
|
|
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 |
|
|
trigg Apprentice
Joined: 14 Jun 2018 Posts: 179
|
Posted: Wed Jul 18, 2018 8:17 pm Post subject: |
|
|
e alla fine grazie alle dritte
sono riuscito a fare lo script che aveva nella testa
TRIGG.sh GENTOO TERMINAL MANAGER |
|
Back to top |
|
|
sabayonino Veteran
Joined: 03 Jan 2012 Posts: 1012
|
Posted: Wed Jul 18, 2018 9:18 pm Post subject: |
|
|
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
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" |
_________________ LRS i586 on G.Drive
LRS x86-64 EFI on MEGA |
|
Back to top |
|
|
|