informatica:sol:laboratorio15:esercitazionia:bashscriptexamples
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Prossima revisione | Revisione precedente | ||
| informatica:sol:laboratorio15:esercitazionia:bashscriptexamples [26/03/2015 alle 09:00 (11 anni fa)] – creata Massimo Torquati | informatica:sol:laboratorio15:esercitazionia:bashscriptexamples [16/03/2016 alle 11:22 (10 anni fa)] (versione attuale) – Massimo Torquati | ||
|---|---|---|---|
| Linea 1: | Linea 1: | ||
| - | ===== Alcuni | + | ===== Alcuni esempi di script bash ===== |
| ==== toupper.sh ==== | ==== toupper.sh ==== | ||
| - | Stampa a video i nomi passati come argomento allo script contenenti lettere minuscole in nomi con tutte le lettere maiuscole: | + | Stampa a video i nomi passati come argomento allo script contenenti lettere minuscole in nomi con tutte le lettere maiuscole. |
| < | < | ||
| Linea 12: | Linea 12: | ||
| # Pluto --> PLUTO | # Pluto --> PLUTO | ||
| - | # per ogni argomento | + | # per ogni argomento |
| - | for f in $@; do | + | for f in $@; do |
| # considero solo il nome e non eventuali path che lo precedono | # considero solo il nome e non eventuali path che lo precedono | ||
| bname=`basename $f` | bname=`basename $f` | ||
| Linea 41: | Linea 41: | ||
| </ | </ | ||
| + | ==== removeblanklines.sh ==== | ||
| + | |||
| + | Data una lista di file testuali in input come argomenti dello script, rimuovere da ogni file le linee vuote. | ||
| + | |||
| + | < | ||
| + | #!/bin/bash | ||
| + | |||
| + | # se non ci sono argomenti stampo il messaggio di usage | ||
| + | if [ $# -eq 0 ]; then | ||
| + | echo " | ||
| + | exit -1 | ||
| + | fi | ||
| + | # per ogni argomento | ||
| + | for file in $@; do | ||
| + | # controllo che sia un file regolare | ||
| + | if [ ! -f $file ]; then | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | # controllo che sia scrivibile | ||
| + | if [ ! -w $file ]; then | ||
| + | echo " | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | # rimuovo le linee bianche | ||
| + | # ^ rappresenta l' | ||
| + | # $ rappresenta la fine della linea | ||
| + | $(sed -i '/ | ||
| + | |||
| + | if [ $? -ne 0 ]; then | ||
| + | echo " | ||
| + | exit 3 | ||
| + | fi | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | ==== include.sh ==== | ||
| + | |||
| + | Realizzare uno script bash che preso come argomento un nome di file (il file può avere solo estensione " | ||
| + | < | ||
| + | #!/bin/bash | ||
| + | |||
| + | # es. >$ include.sh prova.c | ||
| + | # Il file " | ||
| + | # Il file " | ||
| + | |||
| + | # se non ci sono argomenti stampo il messaggio di usage | ||
| + | if [ $# -eq 0 ]; then | ||
| + | echo " | ||
| + | exit -1 | ||
| + | fi | ||
| + | # controllo se il file in ingresso e' un file regolare | ||
| + | if [ ! -f $1 ]; then | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # controllo l' | ||
| + | r=$(echo $1 | grep " | ||
| + | if [ " | ||
| + | echo " | ||
| + | exit 2 | ||
| + | fi | ||
| + | # controllo l' | ||
| + | if [[ ! $1 =~ .*\.[ch] ]]; then | ||
| + | echo " | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | # per ogni linea verifico se c' | ||
| + | while read line; do | ||
| + | if [[ $line =~ \ *#\ *include\ *\" | ||
| + | echo "Il file \" | ||
| + | else | ||
| + | if [[ $line =~ \ *#\ *include\ *\< | ||
| + | echo "Il file \" | ||
| + | fi | ||
| + | fi | ||
| + | done < $1 | ||
| + | </ | ||
| + | |||
| + | ==== spaziodisco.sh (un esempio più complesso) ==== | ||
| + | |||
| + | Data un nome di directory come argomento dello script, stampare sullo standard output la lista ordinata in modo decrescente (in base alla size) dei file/ | ||
| + | Es: ./ | ||
| + | < | ||
| + | riccardo | ||
| + | marta D 9G | ||
| + | sara | ||
| + | miofile | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | #!/bin/bash | ||
| + | |||
| + | if [[ $# != 1 ]]; then | ||
| + | echo " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if [ ! -d $1 ]; then | ||
| + | echo " | ||
| + | exit 2 | ||
| + | fi | ||
| + | if [ ! -r $1 ]; then | ||
| + | echo " | ||
| + | exit 3 | ||
| + | fi | ||
| + | |||
| + | # togliamo lo slash finale se c' | ||
| + | # from http:// | ||
| + | # ${var%Pattern} | ||
| + | # Remove from $var the shortest part of $Pattern that matches the back end of $var. | ||
| + | startdir=${1%/ | ||
| + | |||
| + | # creo una lista contenente l' | ||
| + | # sort -h ordina aspettandosi numeri in formato human readable 10K, 2G..... | ||
| + | data=( $(du -sh $startdir/* 2> /dev/null | sort -hr) ) | ||
| + | # prendo il numero totale di elementi dalla lista | ||
| + | ndata=${# | ||
| + | |||
| + | #scorro la lista prendendo le coppie <size, / | ||
| + | for((i=0; | ||
| + | # suppongo che per default sia un file | ||
| + | type=F | ||
| + | # e' una directory ? | ||
| + | if [ -d ${data[i+1]} ]; then | ||
| + | type=D | ||
| + | fi | ||
| + | # prendo solo il nome | ||
| + | name=`basename ${data[i+1]}` | ||
| + | # faccio la stampa formattata usando printf (C-style) | ||
| + | printf " | ||
| + | done | ||
| + | </ | ||
informatica/sol/laboratorio15/esercitazionia/bashscriptexamples.1427360401.txt.gz · Ultima modifica: 26/03/2015 alle 09:00 (11 anni fa) da Massimo Torquati
