bash

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
simoblu88
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 257
Iscrizione: sabato 9 febbraio 2008, 10:32

bash

Messaggio da simoblu88 »

salve ragazzi è la primissima esperienza con bash anche se conosco un po di c++ ma non so se puo essermi utile...vi volevo chiedere per creare uno script lo posso fare con editor di testo? se si come devo salvare il file con quale estensione? dove lo devo salvare ? e per avviare lo script da terminale che comandi devo dare (tipo chmod 555 nomefile,o basch nomefile)? grazie
Avatar utente
SAKO
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 528
Iscrizione: sabato 20 ottobre 2007, 0:11
Contatti:

Re: bash

Messaggio da SAKO »

Ciao, per scrivere il tuo script puoi usare vi, per usarlo digita vi nel terminale.
Qui potrai scrivere il tuo programma.con questo comando gli dai i permessi "chmod 700 nomeProgramma.sh"
e con questo lo esegui "./nomeProgramma.sh"
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: bash

Messaggio da Volans »

Qualsiasi editor di testo va bene per scrivere uno script bash sh ;)
Il permesso che serve per eseguirlo è quello di esecuzione (la "x" quando visualizzi i permessi a lettere) e deve averlo chi dovrà poi eseguire lo script (utente, gruppo, tutti).

In generale simoblu88 ti consiglio di consultare queste due guide:
Guida Linux: Programmazione della shell 11.14
Guida avanzata di scripting Bash
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
gaspa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 754
Iscrizione: lunedì 5 dicembre 2005, 13:12
Località: Castenaso

Re: bash

Messaggio da gaspa »

SAKO ha scritto: Qui potrai scrivere il tuo programma.con questo comando gli dai i permessi "chmod 700 nomeProgramma.sh"
e con questo lo esegui "./nomeProgramma.sh
Speficico che in linux l'estensione del programma e' soltanto una convenzione.
Di solito per i binari viene guardato il "magic number"(i primi byte del file) che ne descrivono il tipo... per gli script viene invece utilizzato "l'hash bang", che specifica quale interprete usare

In ogni caso e' buona prassi per evitare di incasinarsi i propri file, ma piu' per noi umani che per la macchina...
--
-gaspa-
simoblu88
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 257
Iscrizione: sabato 9 febbraio 2008, 10:32

Re: bash

Messaggio da simoblu88 »

ma se senza dargli i permessi chmod 777......do bash nomefile non è la stessa cosa?
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: bash

Messaggio da Guiodic »

simoblu88 ha scritto: ma se senza dargli i permessi chmod 777......do bash nomefile non è la stessa cosa?
sh nomefile è la sintassi più corretta.
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: bash

Messaggio da Volans »

Il permesso di esecuzione devi daglielo comunque:

Codice: Seleziona tutto

chmod +x nomefile
oppure da GUI tasto destro sul file e poi proprietà -> tab permessi e selezioni consentire esecuzione del file come programma.
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
gaspa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 754
Iscrizione: lunedì 5 dicembre 2005, 13:12
Località: Castenaso

Re: bash

Messaggio da gaspa »

Volans ha scritto: Il permesso di esecuzione devi daglielo comunque:
falso... se lo chiami da bash, sh, o con "." non importa il permesso di esecuzione

Codice: Seleziona tutto

[515]gaspa@saturnino:bin$ ls -l ciao.sh 
-rw-r--r-- 1 gaspa gaspa 22 2008-03-03 14:34 ciao.sh
[516]gaspa@saturnino:bin$ sh ciao.sh 
ciao
[517]gaspa@saturnino:bin$ . ciao.sh 
ciao
--
-gaspa-
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: bash

Messaggio da Volans »

gaspa hai ragione se lo chiami con sh specificato non serve il permesso di esecuzione, ma per chiamarlo con ./nomefile si.

Con punto non ho capito cosa fai dato che a me chiude la shell ;)
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
gaspa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 754
Iscrizione: lunedì 5 dicembre 2005, 13:12
Località: Castenaso

Re: bash

Messaggio da gaspa »

Volans ha scritto: gaspa hai ragione se lo chiami con sh specificato non serve il permesso di esecuzione, ma per chiamarlo con ./nomefile si.
?? anche qui non mi sembra, eseguendolo con sh, dovrebbe andare a gestire l'hashbang.. (e' piu' o meno come chiamare un perl/python con il proprio interprete, quindi non capisco perche' dovrebbe essere necessario il '.sh'
$ mv ciao.sh ciao
[525]gaspa@saturnino:bin$ sh ciao
ciao
Con punto non ho capito cosa fai dato che a me chiude la shell ;)
il punto serve per "valutare" uno script. La differenza tra il comando sh e il punto e' che nel primo caso esegue un'altra shell, mentre nel secondo no.
Quindi se c'e` un qualche errore (che mi pare capire di permessi, nel tuo caso) nel secondo caso si chiude la shell che stai usando.

bye
--
-gaspa-
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: bash

Messaggio da Volans »

Non ci siamo capiti ma dicevamo la stessa cosa prima gaspa... per "sh specificato" intendevo come comando sh nomefile non come estensione. ;)

Se do . nomefile mi chiude la shell dato che lo scritp è un echo "ciao" non ci sono sicuramente errori... quindi penso dipenda dal fatto che non ha il permesso di esecuzione. :)
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
gaspa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 754
Iscrizione: lunedì 5 dicembre 2005, 13:12
Località: Castenaso

Re: bash

Messaggio da gaspa »

Volans ha scritto: Non ci siamo capiti ma dicevamo la stessa cosa prima gaspa... per "sh specificato" intendevo come comando sh nomefile non come estensione. ;)
ah, ok, scusami. ;D
Se do . nomefile mi chiude la shell dato che lo scritp è un echo "ciao" non ci sono sicuramente errori... quindi penso dipenda dal fatto che non ha il permesso di esecuzione. :)
e questo e' strano, perche' io non li ho, i permessi di esecuzione. E mi sembra verosimile che non servano, visto che il comando significa 'interpreta il seguente script bash'
$ source ciao.sh
ti fa la stessa cosa??
--
-gaspa-
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: bash

Messaggio da Volans »

Strane cose succedono... :)

Se faccio . prova.sh da root me lo esegue senza problemi, . prova non me lo esegue e chiude la shell. Da utente mi chiude la shell in entrambi i casi.

Ho provato con un strace ma in realtà l'output è praticamente lo stesso (anche se c'è una riga con permission denied). Suggerimenti per risolvere l'arcano? :)
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
gaspa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 754
Iscrizione: lunedì 5 dicembre 2005, 13:12
Località: Castenaso

Re: bash

Messaggio da gaspa »

Volans ha scritto: Strane cose succedono... :)

Se faccio . prova.sh da root me lo esegue senza problemi, . prova non me lo esegue e chiude la shell. Da utente mi chiude la shell in entrambi i casi.

Ho provato con un strace ma in realtà l'output è praticamente lo stesso (anche se c'è una riga con permission denied). Suggerimenti per risolvere l'arcano? :)
boh???
prova ad aprire una shell, cioe',
$ bash
$ .  prova

cosi' dovresti vedere l'errore. Che comunque, sara' probailmente permission denied...
Non so cosa potremmo avere di diverso... $SHELL ?? i permessi della directory?? (non credo... pero'...)
Hai controllato di avere prova nel path? altrimenti devi dire ./prova
So che sono robe banali, ma sinceramente non so dove pescare.
--
-gaspa-
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: bash

Messaggio da Volans »

E se ti dico che ora funziona... :D mah i misteri dell'informatica... ora va in ogni combinazione! :)
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
urka58
Prode Principiante
Messaggi: 129
Iscrizione: mercoledì 21 marzo 2007, 19:32

Re: bash

Messaggio da urka58 »

Il punto è un comando TCL ed è equivalente a source.
Se in uno script my_script inserisco
. (source) my_source_file
le variabili definite in my_source_file vengono impostate in my_script e i comandi in my_source_file vengono eseguiti nella shell corrente.
source restituisce l'exit status dell'ultimo comando del file che viene passato come oggetto. (in assenza di un comando return)
Ciao
gaspa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 754
Iscrizione: lunedì 5 dicembre 2005, 13:12
Località: Castenaso

Re: bash

Messaggio da gaspa »

Volans ha scritto: E se ti dico che ora funziona... :D mah i misteri dell'informatica... ora va in ogni combinazione! :)
ROTFL...  (rotfl)
forse avevi qualche variabile settata strana. boh.

urka58 ha scritto: Il punto è un comando TCL ed è equivalente a source.
mah, stiamo parlando di bash... forse tcl ha gli stessi comandi... ma non stiamo parlando di tcl...
comunque, da quel che dici, si'... mi pare che dovrebbero funzionare come dici tu.
--
-gaspa-
urka58
Prode Principiante
Messaggi: 129
Iscrizione: mercoledì 21 marzo 2007, 19:32

Re: bash

Messaggio da urka58 »

Non è che lo dico io ...
Dalla pagina man di bash (paragrafo built in):
. (a period)

              . filename [arguments]

    Read and execute commands from the filename argument in the current shell context. If filename does not contain a slash, the PATH variable is used to find filename. When Bash is not in posix mode, the current directory is searched if filename is not found in $PATH. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. The return status is the exit status of the last command executed, or zero if no commands are executed. If filename is not found, or cannot be read, the return status is non-zero. This builtin is equivalent to source.
oppure più in dettaglio la pagina man di source.
Ciao
gaspa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 754
Iscrizione: lunedì 5 dicembre 2005, 13:12
Località: Castenaso

Re: bash

Messaggio da gaspa »

urka58 ha scritto: Non è che lo dico io ...
Dalla pagina man di bash (paragrafo built in):
forse non mi ero spiegato, ma non discutevo questo, bensi' il fatto che fosse un "comando TCL".
Cmq, stiamo parlando di nulla, dai. :)
--
-gaspa-
urka58
Prode Principiante
Messaggi: 129
Iscrizione: mercoledì 21 marzo 2007, 19:32

Re: bash

Messaggio da urka58 »

Cmq, stiamo parlando di nulla, dai.
stiamo parlando di un comando shell (che è anche un comando tcl), non mi pare che siano volati insulti, quindi non capisco la tua esortazione a terminare la discussione..., comunque, se vuoi così, va bene.
Ciao
Ultima modifica di urka58 il mercoledì 5 marzo 2008, 23:55, modificato 1 volta in totale.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 4 ospiti