Lezione di bash script...

6 risposte [Ultimo contenuto]
Ritratto di lando
lando
(Junior)
Offline
Junior
Iscritto: 05/05/2005
Messaggi: 12

Ne avrei bisogno. Sto guardando lo script Firefox e non capisco alcuni simboli,caratteri....Per esempio (nella parte sotto)
[ -x "${curr_pis}" ] <<<< cosa e' -x ?
*.sh) . <<<<<<<<<<< ?
*) <<<<<<<<<< ?
Sotto il pezzetto . Grazie.

case "${1}" in
"start")
for curr_pis in "${dist_bin}/init.d"/S* "${HOME}/${MOZ_USER_DIR}/init.d"/S* ; do
if [ -x "${curr_pis}" ] ; then
case "${curr_pis}" in
*.sh) . "${curr_pis}" ;;
*) "${curr_pis}" "start" ;;
esac
fi

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1486

man bash
CONDITIONAL EXPRESSIONS
-x file
True if file exists and is executable.

*.sh sta per tutti i file che finiscono come .sh
[modifico] no, in questo caso forse no... dovrei documentarmi Smile
[rimodifico] ecco.. direi che l'interpretazione giusta e' se il file finisce con .sh

*) nel caso nessuna della condizioni dell'case sia soddisfatta fai quello che segue

Ritratto di pietro
pietro
(Collaboratore)
Offline
Collaboratore
Iscritto: 30/06/2005
Messaggi: 792

Consiglio a tutti di imparare ad utilizzare la shell UNIX: al contrario di quella di Windows (mi fa schifo solo scriverla questa parola.... Wink) si tratta di un vero e proprio ambiente di programmazione, con variabili, espressioni, array, funzioni, condizioni, e tanto altro ancora. Quando ero piccolo l'ho usata per scrivere tantissimi programmi....

A mio avviso la shell UNIX e' una di quelle cose che rendono il sistema immensamente piu' gestibile e manutenibile dai sistemisti, che possono automatizzare tantissime cose.

Oltre al manuale di bash citato da krisio vorrei segnalarvi un bellissimo libro, un po' datato, ma secondo me e' sempre una lettura gradevolissima:

The UNIX Programming Environment

di Kernighan e Pike (per chi non lo sapesse Kernigan e' quello che ha inventato il C insieme a Ritchie...)

Ciao e.... "che la shell sia con voi!"

Debian Lenny on BeagleBoard

Ritratto di lando
lando
(Junior)
Offline
Junior
Iscritto: 05/05/2005
Messaggi: 12

Non ho trovato con man bash una parte che si riferisce a "conditional expressions " .....
Comunque il tutto vorrebbe dire......(?)
SE esiste un file in "${curr_pis}" ALLORA
nel CASO fosse un *.sh
. "${curr_pis}" ;; <<<<<<<<<<< che e' quel punto ?
altrimenti
"${curr_pis}" "start" ;;
un bel casotto......... :-P

Quote:

if [ -x "${curr_pis}" ] ; then
case "${curr_pis}" in
*.sh) . "${curr_pis}" ;;
*) "${curr_pis}" "start" ;;
esac
fi

Ritratto di pietro
pietro
(Collaboratore)
Offline
Collaboratore
Iscritto: 30/06/2005
Messaggi: 792

Mettendo il punto prima di un comando si esegue il comando nella stessa shell dello script di invocazione, altrimenti viene aperta una nuova shell.

Mettendo il punto si ottiene che le variabili di ambiente impostate dalla shell chiamata vengono riportate nella shell invocante (in effetti si tratta della stessa shell....) cosa non possibile se si invoca il comando senza il punto.

Comunque, anche se non hai trovato la sezione delle espressioni condizionali nel manuale bash (dubito, secondo me hai cercato male...), basta fare una piccola ricerca in Internet per trovare tonnellate di documentazione sulla shell.

Toh: mentre scrivevo ho trovato la sezione delle espressioni condizionali sul manuale bash.

C'è anche un HOWTO

Ciao

Debian Lenny on BeagleBoard

Ritratto di lando
lando
(Junior)
Offline
Junior
Iscritto: 05/05/2005
Messaggi: 12

Mi sono fatto un corso accelerato su "for" , "case" , e cose varie...
Ho fatto svolgere > bash -x firefox .....per debaggare lo svolgimento dello script. Ma non riesco a vedere come viene fatto partire FF !(nella trace > + ./run-mozilla.sh ./firefox-bin ) .
Sotto il codice interessato e la trace del debug...se qualcuno e' piu' forte di me....grazie.

Quote:

case "${1}" in
"start")
for curr_pis in "${dist_bin}/init.d"/S* "${HOME}/${MOZ_USER_DIR}/init.d"/S* ; do
if [ -x "${curr_pis}" ] ; then
case "${curr_pis}" in
*.sh) . "${curr_pis}" ;;
*) "${curr_pis}" "start" ;;
esac
fi

La debug trace >>>>>>>>>>>
+ case "${1}" in
+ for curr_pis in '"${dist_bin}/init.d"/S*' "${HOME}/${MOZ_USER_DIR}/init.d"/S* '
+ '[' -x './init.d/S*' ']'
+ for curr_pis in '"${dist_bin}/init.d"/S*' '"${HOME}/${MOZ_USER_DIR}/init.d"/S* '
+ '[' -x '/home/lando/.mozilla/firefox/init.d/S*' ']'
+ '[' 0 = 1 ']'
+ ./run-mozilla.sh ./firefox-bin

PS- da notare che > home/lando/.mozilla/firefox/init.d/S..non esi
ste...manca /init.d/S
come non esiste la /init.d/S* del ciclo for precedente...........

Ritratto di lando
lando
(Junior)
Offline
Junior
Iscritto: 05/05/2005
Messaggi: 12

........ho tolto questa parte di codice.......e FF parte tranquillamente !!!