c shell1

c shell2

b shell scripts 1
b shell scripts 2
b shell scripts 3

modifica testo su line di comando:
ctrl H: elimina carattere a sinistra (Backspace)
ctrl D: elimina carattere a destra
ctrl K: cancella fino a fine riga
ctrl U: cancella da inizio riga
ctrl Y: incolla il testo cancellato
ctrl A: sposta cursore inizio riga
ctrl E: sposta cursore fine riga
ctrl F: sposta cursore a destra (freccia)
ctrl B: sposta cursore a sinistra (freccia)
ctrl T: inverte due caratteri

lista eventi della history list:
history

riesegui l'ultimo comando:
!!

riesegui il comando n:
!n

riesegui il comando nella posizione relativa -n:
!-n 

riesegui il comando piu' recente che inizia per stringa:
!stringa

lista degli alias:
alias

crea un alias:
alias aliasname command

cancella un alias:
unalias aliasname

lista dei job attuali:
jobs

kill del job numero n:
kill %n

manda il job in foreground:
fg %n

sospendi il job e manda in background:
C-Z
bg

sospendi il job e manda in foreground:
stop %n
fg %n

avvisa quando un job cambia stato:
notify %n

ridirige standard output e standard error:
cat a b >& filename

mostra il contenuto dello stack:
dirs

aggiunge unadirectory nello stack:
pushd dirname

inverte le ultime due directory dello stack:
pushd

rimuove la top directory dallo stack:
popd

pulisce lo schermo:
clear

stampa una stringa:
echo "stringa"

separatore di comandi:
clear ; echo "seconda riga"

inibisce il newline:
echo -n "la data di oggi: " ; date

dichiara e assegna una variabile di stringa:
set var = stringa
set var = "stringa"

variabile con contenuto NULL:
set var =

usa il contenuto di una variabile:
echo $var

lista delle variabili dichiarate:
set

rimuove una variabile dalla lista:
unset var

concatenamento di stringhe:
    set sentence = "Hi"
    set sentence = "$sentence there everybody"

dichiara e assegna un array:
set colors = (rosso blue giallo)

usa il contenuto di un array:
echo $colors

usa un elemento di un array:
echo colors[2]

variabile del numero di elementi di un array:
$#colors

dichiara un array vuoto:
set colors ('' '' '')

assegna un elemento di un array:
set colors[2] = rosso

range di un array:
echo colors[2-3]
echo colors[2-]

aggiungi un elemento in fondo ad un array:
set colors = ($colors giallo)

aggiungi un elemento in mezzo ad un array:
set colors = ($colors[1-2] giallo $colors[3-])

elimina il primo elemento di un array:
shift color

dichiara e assegna una variabile numerica:
@ count = 3
echo $count

espressioni numeriche:
@ num = ( 5 * 3 + 4 / 2 ) 

incremento e decremento:
@ num++
@ num--

espressioni relazionali, (vero 1 - falso 0):
@ result = ( $count <= 5 )

     ==        equal     (either strings or numbers)
     !=        not equal     (either strings or numbers)
     =~        string match
     !~        string mismatch
     <=        numerical less than or equal to
     >=        numerical greater than or equal to
     >         numerical greater than
     <         numerical less than

dichiara un array numerico:
set vec = (0 0 0 0 0)

assegna un elemento di un array numerico:
@ vec[3] = 5

uso di un array numerico:
echo $vec
echo $vec[3]
echo $vec[$n]

valore di input da terminale (the shell will pause until
the user types a carriage return
$<

    set var = $<

variabile logica su dichiarazione di variabile,
vale 1 se la variabile esiste:
$?count
${?count}

    if ($?dirname) then
        ls $dirname
    endif

Utilizzo dell'output di un comando all'interno di un altro comando:
`command`
              echo "Le righe nel file sono `wc -l filename`"


--------------built in variables:

la lista si ottiene col comando: 
set

$cwd       -- current working directory
$user      -- who am I?
$hostess   -- name of the computer I am logged on to
$path      -- my execution path (list of directories to be searched for executables)
$term      -- what kind of terminal I am using
$status    -- a numeric variable, usually used to retun error codes of last command
$shell     -- which shell am I using  (usu. either /bin/csh or /bin/sh)
$history   -- lenght of history list
$prompt    -- what I am currently using for a prompt
   set prompt = '! % '

variabile del process id number:
$$
    cp file tempfile.$$

mostra il valore di una variabile di ambiente:
echo $Var

mostra tutte le variabili di ambiente:
printenv

assegna una variabile di ambiente:
setenv Var xyz
(in bash: export Var=xyz)

dichiara una variabile di ambiente:
(esportata anche dei child processes):
setenv PATH (/usr/bin /bin .)

$argv
array degli argomenti di un comando
$argv[n] si abbrevia in $n
$* indica tutti gli argomenti
$#argv indica il numero di elementi

$HOME
pathname della home directory

$PATH
array con i pathnames

----------variabili di shell come switches
hanno effetto se la variabile e' stata dichiarata
quindi si annullano con unset

set echo
mostra i comandi prima di eseguirli

set noclobber
previene la sovrascrittura di un file con lo standard output

set notify
avvisa quando un comando in bg termina

-------------------script

gli script devono contenere nella prima riga 
#!/bin/csh

una volta compilati devono essere resi eseguibili:
chmod u+x scriptname
quindi eseguiti con:
./scriptname

opzione debugging:
csh -xv scriptname

in alternativa possono essere eseguiti con:
source scriptname

.login
questo script viene eseguito all'inizio di ogni sessione

.cshrc
questo script viene eseguito ad ogni shell o esecuzione di script

.logout
questo script viene eseguito a fine sessione

-----------strutture di controllo

if (expression) command

if (expression) then
  commands
endif

if (expression) then
  commands
else
  commands
endif

if (expression) then
  commands
elseif (expression) then
  commands
else
  commands
endif

goto label
..
label:
..

onintr label
..
label:
..

while (expression)
  commands
end

    @ n = 5
    while ($n) 
         # do something
         @ n--
    end

per uscire da un loop:
break

per uscire dalla shell:
exit

file queries:
    -e file           file merely exists (may be protected from user)
    -r file           file exists and is readable by user
    -w file           file is writable by user
    -f file           file is an ordinary file
    -d file           file is a directory

if (-e file) then
...
endif

operatori booleani:
! || &&

if (! -e file) then
...
endif

if (-e file && -w file) then
...
endif

multiway branch:
     switch ( expression )
        case a:
               commands
               breaksw
        case b:
               commands
               breaksw
     endsw

     switch ($argv[$1])
        case quit:
               breaksw  # leave the switch statement
        case list:
               ls
               breaksw
     endsw