1) Raccogliere gli script in una dir e inserirla nel PATH
Aiuta molto nell'ordine. Una possibilità (standard, diciamo, dato che già inculso nel PATH (vedi /etc/profile.env)) é usare /usr/local/bin, l'altra é creare la cartella ~/bin dove metto tutti i miei script, quindi l'ho aggiunta alla variabile PATH solo per il mio utente (mettendo "export PATH="$PATH:/home/emo/bin" nel .bashrc)
2) Eseguire gli script in modalità debug
In genere gli script iniziano con #!/bin/bash (o #!/bin/sh). Bene, mettendo -x come argomento, il nostro script verrà eseguito in modalità debug. Esempio:
Code: Select all
emo@Dune ~ $ ./script.sh
+ echo Hello World
Hello World
emo@Dune ~ $ cat script.sh
#!/bin/bash -x
echo Hello World
emo@Dune ~ $
Il che aiuta molto a migliorare lo stile. Un simpatico comando che potete usare per trovare tutti gli script presenti nel vostro sistema:
Code: Select all
for i in $( echo $PATH | sed 's/:/\ /g' ); do for a in $i/*; do if [[ -f $a ]] && [[ -r $a ]]; then if [[ "x$( cat $a | grep "#\!/bin/bash" )" != "x" ]] || [[ "x$( cat $a | grep "#\!/bin/sh" )" != "x" ]]; then echo $a && echo $a >> /home/$USER/lista.sh; fi; fi; done; doneUsare delle funzioni (con function) può aiutare a mantere il codice leggibile e mantenibile. Nel caso di un operazione ripetuta più volte, le funzioni tornano molto comode. Un esempio di raccolta di funzioni che penso sia molto conosciuto é /sbin/functions.sh.
Esempio:
Code: Select all
#!/bin/bash
function print {
echo $1
}
print ciao
exitOvvero, non é opersource per nulla, no? Quindi, se trovate in uno script una funzione che vi piace (o anche solo una porzione di codice), perché non riusarla (magari citandone la fonte o ringraziando l'autore)? Ho pensato che potrebbe essere utile anche segnalarle qua.
/bin/rc-status: serve a controllare tutti gli argomenti da linea di comando
Code: Select all
do_opt() {
case $1 in
--all|-a)
ALL=true
;;
--depend)
DEPEND=true
;;
--unused|-u)
ALL=true
UNUSED=true
;;
--list|-l)
ls -1 ${runleveldir}
exit 0
;;
--help|-h|-*)
echo "USAGE: $0 [--all | --list | --unused | <runlevel>]"
echo " --all -a Show services at all run levels"
echo " --list -l Show list of run levels"
echo " --unused -u Show services not assigned to any run level"
echo " <runlevel> Show services assigned to <runlevel>"
echo "If no arguments are supplied, shows services for current run level."
exit 0
;;
*)
runlevel=$1
;;
esac
}
for opt in "$@" ; do
do_opt ${opt}
[ -n "$2" ] && shift
doneCommentate molto i vostri script con #. Vi assicuro che aiuta sia voi (in futuro) che gli altri a capirli più in fretta.
Pensate sia utile una raccolta del genere?




