|
|
La Shell è l'interprete dei comandi UNIX.
I comandi possono essere immessi al prompt oppure inseriti in un file eseguibile (tipo i file .BAT del DOS).
Il file eseguibile non deve avere nessuna particolare estensione, però deve essere, appunto, eseguibile.
Per rendere il file eseguibile
| a livello utente, digitare: | chmod u+x nomefile |
| a livello gruppo, digitare: | chmod g+x nomefile |
| agli altri, digitare: | chmod o+x nomefile |
| in un colpo solo: | chmod ugo+x nomefile |
| Piccola divagazione sul comando 'chmod':
se eseguiamo un comando 'ls -al' otterremo una
lista del contenuto della dir in cui ci troviamo, una entrata per
riga, e all'inizio della riga una stringa del tipo
- il carattere nella prima posizione indica il tipo di entrata ('-' per i file, 'd' per le dir, ecc.) - seguono tre insiemi di tre caratteri (nel nostro caso
rwx,r-x,
e r--):
- in ciascun insieme:
Nel caso di un file con gli attributi -rwxr-xr--, sapremo che - l'utente ha le abilitazioni a
lettura(r), scrittura(w)
ed esecuzione (x)
Dunque il comando chmod ugo+x nomefile abilita(+) tutti (u,g,o) all'esecuzione (x) di nomefile così come il comando chmod g-w nomefile toglie(-) agli altri dello stesso gruppo (g) l'eventuale abilitazione alla sua modifica (w) Si può agire contemporaneamente su tutti i parametri, facendo corrispondere un valore numero binario di tre bit a ciascun insieme: il valore binario 111 (decimale 7) abilita tutto (rwx)
Ad esempio, il comando: chmod 754 nomefile assegnerà a 'nomefile' la maschera vista all'inizio
(rwxr-xr--)
|
Uno script normalmente inizia con una stringa che specifica il path del suo interprete, preceduto da #!, p.e.:
#!/bin/sh
se si tratta della Bourne Shell, oppure ksh per la Korn Shell, csh per la C Shell, ecc.
Elementi principali del linguaggio
di Shell
| prima riga | #!path |
| commenti | iniziano con #, su una sola riga |
| variabili | non vanno dichiarate
non sono indicizzabili (array) Assegnazione via: nome_variabile=valore read nome_variabile (input da utente) Richiamabili col nome preceduto da $: $nome_variabile |
| parametri | Si tratta di variabili speciali:
$0 riporta il nome dello script $# riporta il n. di parametri sulla linea di comando $* riporta tutti i parametri sulla line a di comando $? riporta l'esito dell'ultimo comando $$ riporta il pid di eecuzione dello script |
| stringhe | fra apici singoli: nessuna modifica
fra apici doppi: le variabili vengono sostituite fra apici inversi (alt-96): vengono trattate come un comando e sostituite dal suo output |
| caratteri speciali | !"$&'*?<>[]\`
per 'perdere' il loro significato speciale devono essere preceduti da \ |
| expr | expr int1
<op> int2
<op> puo' essere: +, -, *, /, % -------------------------------- n.b.: usare il 'quoting' per la moltiplicazione: expr $a \* 2 n.b.: parametri separati da blank |
| test | - sulle stringhe:
test -z stringa - stringa vuota test -n stringa - stringa non vuota test stringa1 = stringa2 - stringhe uguali test stringa1 != stringa2 - stringhe diverse - sui numeri interi: test int1 <op> int2 <op> puo' essere: -eq, -ne, -gt, -lt, -ge, -le - sui file: test <op> file <op> puo' essere: -e - empty -s - not empty -f - file -d - directory -o - owned by user -r - read permission -w - write permission -x - exec permission -c - char device (TTY) -b - block device - operatori logici: -a - AND -o - OR ! - NOT -------------------------------- n.b.: parametri separati da blank |
| if | if condizione
then ... else ... fi |
| case | case espressione
in
valore1) comando;; valore2) comando;; *) comando;; esac |
| while | while condizione
do ... done |
| for | for variabile
in elenco
do ... done |
Esempi
| prima riga | #!/bin/sh |
| commenti | #esempio di commento |
| variabili | a=12
echo 'Digita gli anni' read anni mesi=`expr $a \* $anni` echo "Numero mesi=$mesi" |
| parametri | Si tratta di variabili speciali:
$0 riporta il nome dello script $# riporta il n. di parametri sulla linea di comando $* riporta tutti i parametri sulla line a di comando $? riporta l'esito dell'ultimo comando $$ riporta il pid di esecuzione dello script |
| stringhe | v. esempio variabili |
| caratteri speciali | !"$&'*?<>[]\`
per 'perdere' il loro significato speciale devono essere preceduti da \ |
| expr | per incrementare una variabile:
i=`expr $i + 1` |
| test | v. esempio 'if' |
| if | echo 'Digita gli anni'
read anni if test $anni -lt 18 then echo 'minorenne...' else echo 'maggiorenne...' fi |
| case | case $marca
in
apple) echo 'ottima';; ibm) echo 'buona';; *) echo 'sconosciuta';; esac |
| while | # esempio 1 - conta
fino a 10
while i -le 10 do echo $i i=`expr $i + 1` done # esempio 2 - elabora righe in input # (anche con 'cat file.txt |' prima di while) i=1 while read riga do echo "riga $i: $riga" i=`expr $i + 1` done |
| for | for i in *.txt
do cat $i >> testi done |
|
|
|
|
|
Linux Zine |
|
|
Linux Valley |
|
|
Zio Budda |
|
|
Linuxdoc unibo.it |
|
|
Linuxdoc TELUG (Teramo) |
|
|
Linuxdoc.org |
|
|
Freeos.com |
|
|
Linux.org |
|
|