Michele Liberi software
versione 1.03, 1 settembre 2022
|
|
Michele Liberi
mail: mliberi@gmail.com
cell: 3485211456
|
liberix
- Presentazione
- Programmi scritti in linguaggio C
- espressioni regolari
- servizi TCP V4
- accesso a servizi TCP V4
- applicazioni WEB
- nuovi comandi
- comandi UNIX potenziati
- pst, gerarchia dei processi
- dut, spazio utilizzato dalle directory
- bpwd, cambio della password non interattivo
- ftime, stampa informazioni sui files
- opmsr, ricerca e sostituzione di stringhe
- match, ricerca di stringhe
- cpfl, archiviatore di files
- mvfl, rinomina una lista di files
- lnfl, collegamento di una lista di files
- rmfl, cancellazione di una lista di files
- yargs, esecuzione multipla di un comando
- ecut, estrazione dati da un file di testo
- ecomm, confronto righe di due files
- ejoin, unisce le righe di due files
- esort, ordinamento di dati
- etee, duplicazione del flusso di input
- etr, converte o cancella caratteri
- pths, ricerca di files nel PATH
- memberof, incrocio utenti e gruppi
- pol, calcolo di espressioni
- tmout, lancia un comando con un tempo limite
- NCgrep, selezione di righe basata su regole
- plisten, port listener
- sltn, interazione con un host remoto
- yar, archiviatore minimale alternativo
- cenv, print environment variables
- crittografia
- X clients
- componenti CGI
- Shell scripts
- Siti WEB
- Applicazioni Android
- Installazione
- Licenza d'uso
Il comando pol è la versione potenziata del comando expr.
L'esigenza di sviluppare pol è nata perché mi serviva un modo per generare da shell script un numero progressivo ad unicità garantita.
Per ottenere questo risultato era fondamentale che il caricamento del valore corrente da file, l'incremento, ed il salvataggio, fossero un'unica operazione atomica.
Ad esempio il comando pol :c.pol = N + N 1
- mette un lock sul file .pol in modo che un altro tentativo parallelo di accedere allo stesso file venga messo in attesa
- carica il set di variabili dal file .pol
- incrementa di una unità il valore della variabile N
- salva il set di variabili sul file
- toglie il lock
Inoltre il comando pol fornisce alle shell script la capacità di eseguire calcoli floating point in doppia precisione.
Nell'esempio che segue definisco la funzione pol_eval che calcola un'espressione (in notazione polacca diretta) ed assegna il risultato ad una variabile della shell.
Da notare il fatto che, per motivi di efficienza, la funzione pol_eval lancia il comando pol solo la prima volta, e lo lascia attivo in background.
function pol_eval # result expr
{
test "$pol_in" ||{
pol_in=/tmp/pol.$$.in
pol_out=/tmp/pol.$$.out
mkfifo $pol_in $pol_out
pol :s2 :i <$pol_in >$pol_out &
exec 7>$pol_in 6<$pol_out
rm -f $pol_in $pol_out
}
typeset rc=$1; shift
echo "$@" >&7
read $rc <&6
}
# successione di Fibonacci
x=0.00
y=1.00
while ((1))
do
pol_eval z + $x $y
echo $z
x=$y
y=$z
done
La valutazione delle espressioni avviene in notazione polacca: l'operatore viene posto prima degli operandi.
Ad esempio l'espressione 1+2 in notazione polacca diventa + 1 2.
Gli elementi di una espressione sono:
- costanti numeriche, anche in notazione scientifica
- variabili, una singola lettera da 'A' a 'Z'
- operatori binari:
- +: somma
- -: sottrazione
- *: moltiplicazione
- /: divisione
- ^: elevamento a potenza (il primo operando è l'esponente)
- =: assegnamento (il primo operando è una variabile)
- operatori unari:
- [: radice quadrata
- !: fattoriale
Esempi:
espressione | risultato
|
---|
+ 3 5 | 8
|
- 7 1 | 6
|
/ 10 3 | 3.33333333333333
|
:s2 / 10 3 | 3.33
|
^ 2 5 | 25
|
[ 9 | 3
|
! 4 | 24
|
= A 4 | 4
|
* A 2 | 8
|
= A + A 1 | 5
|
Le espressioni da valutare possono essere date su linea di comando, oppure lette da un file di input, che può essere standard input.
Tra un'espressione e l'altra pol può interpretare ed eseguire dei comandi, introdotti dal carattere ':' (due punti):
- :h calcola un'espressione senza stampare il risultato, tipicamente per assegnare un valore ad una variabile
- :p stampa un messaggio, tipicamente per descrivere il significato di un valore calcolato
- :l stampa il contenuto delle 26 variabili
- :i legge l'espressione da valutare da file
- :r carica il valore dell 26 variabili da file
- :w salva il valore delle 26 variabili su file
- :c mette un lock e carica il valore dell 26 variabili da file, in uscita dal programma le variabili verranno automaticamente salvate
- :u toglie il lock al file in modifica
- :x termina il programma
Rispetto al comando standard expr, il comando pol:
- esegue i calcoli in doppia precisione, e non con numeri interi a 32-bit
- NON esegue calcoli ed elaborazioni su stringhe, solo numerici
- gestisce 26 variabili elementari
- le variabili possono essere lette e salvate su file
- l'aggiornamento di una variabile può essere fatto in modo atomico
Per ulteriori informazioni sulle opzioni disponibile lanciare pol -h.