Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoFiliberto Colombo Modificato 9 anni fa
1
Ancora sulla shell
2
Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure contenuti in file testo (detto script), che viene letto ed eseguito dalla shell. Una shell puo' essere: –di login, –interattiva
3
Shell di login La shell di login viene attivata automaticamente al login nel sistema. Interpreta prima di tutto uno script uguale per tutti gli utenti e scritto dal sistemista: /etc/profile. Successivamente esegue uno script definito dall'utente, nella propria home directory. Per la bash, esegue solo il primo script fra: ~/.bash_profile, ~/.bash_login, ~/.profile Inoltre, anche alla sua attivazione la shell esegue automaticamente lo script ~/.bashrc. All'uscita della sessione viene eseguito lo script ~/.bash_logout Nota: ~ indica la home directory
4
Shell Script Uno script e' dunque una lista di comandi Unix o di shell. I comandi sono separati da operatori (es ; = sequenza) o da un fine linea. Se non specificato altrimenti si suppone che sia la shell sh (che in Linux e' identificata con bash) ad interpretarli. Se si vuole utilizzare un altra shell, si indica sulla prima linea: #! /bin/tcsh …. I l carattere "#" in prima colonna, senza "!" dopo indica una riga di commento.
5
Esecuzione script Ci sono almeno due modi per eseguire uno script: 1.Dandone semplicemente il nome, con eventuali argomenti In questo caso viene attivata una nuova shell (sh, tcsh, ksh o altro, come indicato nella prima linea dello script) che esegue i comandi dello script e poi termina. Lo script deve essere marcato "eseguibile" attraverso il comando chmod. 1.attraverso il comando source (abbreviato anche con il carattere ".") seguito dal nome dello script. In questo caso i comandi sono eseguiti all'interno della shell corrente.
6
Comandi Ci sono vari tipi di comandi: Comandi interni o di shell. Sono comandi eseguiti internamente alla shell, come cd, pwd. Comandi esterni. Sono programmi, ad esempio comandi Unix, esterni. Alias. E' possibile rinominare i comandi, cambiando anche il modo di passare parametri. Funzioni. Negli script sono definibili delle funzioni (vedi manuale).
7
Variabili E' possibile assegnare delle variabili di tipo stringa di caratteri, poi riferibili nella stessa shell. Una variabile e' assegnata con lo statement name=value L'assegnazione e' valida solo nella shell in cui e' eseguita, ma puo' essere esportata nelle shell di livello inferiore (cioe’ creata con um’operazione dalla shell corrente) con il comando di shell $name denota il valore corrente della variabile name.
8
Alcune variabili predefinite Predefinite ed assegante PPID parent del processo PWD current working directory UID user ID EUID effective user ID Predefinite, non assegnate PATH pathname fra cui cercare i comandi (* ). HOME home directory del current user (*) Quando si da' un comando la shell ricerca il file eseguibile nelle directory indicate nella variabile PATH.
9
Grammatica della shell bash Un pipeline e' un comando o una sequenza di comandi separati dal carattere "|". In questo caso l'output di un comando e' preso come input dal successivo. Una lista e' una sequenza di pipeline separati da un operatore fra ;i comandi sono eseguiti in sequenza &i comandi che precedono questo carattere vengono messi in esecuzione in background && operatore booleano and: se il primo comando ha successo, si va avanti nell'esecuzione, altrimenti si termina la lista || operatore booleano or: se il comando a sinistra a successo a sinistra e' vero, non si prosegue, altrimenti si va avanti con esecuzione
10
Comando TEST Il comando test e' usato per definire condizioni su proprieta' dei file, o uguaglianza di stringhe (non valori numerici). test -d file vero se file esiste ed e' una directory. test -f file vero se il file esiste ed e' un file di dati. test -e file vero se il file esiste. test -L file vero se il file esiste ed e‘ un link simbolico. test -r file vero se il file esiste ed e' leggibile. test -x file vero se il file esiste ed e' eseguibile. test stringa1 = stringa2 vero se uguali. test stringa1 != stringa2 vero se diversi. Il comando test expr puo' anche essere scritto come: [ expr ]
11
Comando FOR for name [ in word; ] do list; done dove name e word sono stringhe di caratteri. word e‘ scritto usando una grammatica regolare (di cui si e' gia' parlato a proposito di identificatori di file) e genera un insieme di elementi (stringhe di caratteri). name (una variabile) assume uno alla volta ognuno dei valori di word, e ogni volta e' eseguito list.
12
Comando CASE case word in [pattern [ | pattern ] [....] list ;; ]... esac dove word e' espanso, ottenendo una stringa. Se fa il match con uno degli elementi indicati come pattern, viene eseguita la lista collegata, poi termina il comando. Se no, esce con status=0.
13
Comandi while e until while list do list done Il comando while esegue "do list " finche' l'ultimo comando di "list " ritorna status=0 until list do list done Come while ma con il test negato.
14
Comando IF if list then list [ elif list the list ]... [ else list ] fi Si esegue "if list ", se lo status di ritorno e' =0 allora viene eseguito "then list ". Altrimenti si esegue "else list ", oppure gli altri "if " annidati.
15
Esempio #! /bin/sh echo -n "stringa ? " read VAR case $VAR in "A" | "B" | “C" ) echo maiuscolo;; “a" | “b" | “c" ) echo minuscolo ;; *) echo altro ;; esac
16
Esempio ESEMPIO #! /bin/bash # script di login if [ "$LOGNAME" = "root" ]; then echo " Welcome dear $LOGNAME" if [ -f $HOME/hello]; then echo $HOME/hello fi Nota: # [ -f …] = test –f
17
Parametri posizionali Sono i parametri della chiamata ad uno script. Si identificano con il carattere $ seguito dall'indice della posizione. Se si usano numeri di 2 cifre, si racchiudono fra parentesi graffe. ESEMPIO nome_script alfa 10 $0 $1 $2
18
Parametri speciali $0 nome dello script. $@ collezione di tutti i parametri (a partire da $1). $* stringa ottenuta concatenando tutti i parametri in un'unica stringa (normalmente separati da uno spazio). Quindi "$*" indica "$1 $2 $3.. $n". $# numero di parametri presenti. $$ process id della shell. $- flag opzionali.
19
Ancora su espansione Espansione variabili $nome valore di nome Sostituzione dei comandi. `command` si esegue command e si rimpiazza il tutto con il suo output. Espressioni aritmetiche $( espressione ) si rimpiazza l’espressione con il risultato della valutazione di espressione (operatori: numeri interi, +, *,…) Espansione del path name si espandono i meta-caratteri *, ?, [..]
20
Quoting ‘…’ : Tutto quanto e' racchiuso fra gli apici e' preso come carattere semplice (escluso il carattere apice stesso). Non e' quindi fatta nessuna espansione. “…”: Come con il carattere precedente, ma con delle eccezioni. Viene fatta l'espansione dei parametri (interpretazione del carattere $), viene fatta la command substitution, si considera il carattere di escape "\".
21
Esempi #! /bin/bash echo "numero argomenti = $#" for i in $* do echo "argomento $i" done #! /bin/bash # script s1 VAR=`ls` # espansione comando ls: lista corta di tutti echo VAR=$VAR for i in $VAR; do ls -ld $i; done
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.