informatica:sol:laboratorio15:esercitazionia:bashscriptexamples
Questa è una vecchia versione del documento!
Alcuni esempi di script bash
toupper.sh
Stampa a video i nomi passati come argomento allo script contenenti lettere minuscole in nomi con tutte le lettere maiuscole.
#!/bin/bash
# es. >$ toupper pippo Pluto MINNI
# pippo --> PIPPO
# Pluto --> PLUTO
# per ogni argomento
for f in $@; do
# considero solo il nome e non eventuali path che lo precedono
bname=`basename $f`
# utilizzo tr per trasformare tutti i caratteri minuscoli in maiuscoli
name=$(echo $bname| tr a-z A-Z)
# se il nome conteneva lettere minuscole allora lo stampo sullo stdout
if [ "$name" != "$bname" ]; then
echo "$bname --> $name"
fi
done
base2.sh
Dato un numero intero in base 10 come input stampa a video il numero in base 2.
#!/bin/bash # es. >$ base2.sh 11 # 11 --> 1011 # r=$(echo "obase=2; $1" | bc) echo "$1 --> $r"
spaziodisco.sh (un esempio più complesso)
Data un nome di directory come argomento, stampare sullo standard output la lista ordinata in modo decrescente in base alla size dei file/directory contenuti nella directory passata come argomento, il tipo (F per file e D per dyrectory) e la loro size in formato human readable.
Es: ./spaziodisco.sh /home
riccardo D 15G marta D 9G sara D 6G miofile F 43K
#!/bin/bash
if [[ $# != 1 ]]; then
echo "usa:"
echo " `basename $0` directory"
exit 1
fi
if [ ! -d $1 ]; then
echo "ERROR: $1 non è una directory"
exit 2
fi
if [ ! -r $1 ]; then
echo "ERROR: la directory $1 non è leggibile"
exit 3
fi
# togliamo lo slash finale se c'e' (canonizzare)
# from http://tldp.org/LDP/abs/html/parameter-substitution.html
# ${var%Pattern}
# Remove from $var the shortest part of $Pattern that matches the back end of $var.
startdir=${1%/}
# creo una lista contenente l'output del comando du + sort
# 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=${#data[@]}
#scorro la lista prendendo le coppie <size, /startdir/dir>
for((i=0;i<((ndata-1));i+=2)); do
# 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 "%-30s\t%2s\t%-10s\n" $name $type ${data[i]}
done
informatica/sol/laboratorio15/esercitazionia/bashscriptexamples.1427382322.txt.gz · Ultima modifica: 26/03/2015 alle 15:05 (11 anni fa) da Massimo Torquati
