Bash Usefull Scripts Collection
published on Genuary 10th 2013 (updated on April 22th 2013)
#!/bin/bash
#
# Script che ha lo stesso effetto del comando "wc"
# Questo script è stato sviluppato e reso disponibile in collaborazione con Andrea De Iaco
cd $1
a=$(find -L . -type f | tr ' ' '_')
for j in $(echo ${a[*]})
do
b=$(echo $j | tr '_' ' ')
echo -e \\nIl numero di righe del file $b e':\\n
cat -n $b | tail -1 | cut -f1 # conto il numero di righe del file j-esimo.
echo -e \\n
echo -e Il numero di parole del file $b e':\\n
cat $b | tr ' ' '\n' | cat -b | tail -1 | cut -f1 # conto il numero di parole
echo -e \\n
echo -e Il numero di caratteri del file $b e':\\n
stat -c%s $b # conto il numero di bytes e quindi di caratteri
echo -e \\n
done
#!/bin/bash
#
# Esegue il comando stat -x se il sistema operativo è Mac OS oppure il comando stat se il sistema operativo è Linux
if [ $(uname) == Darwin ]
then
stat -x $1
else
stat $1
fi
# Stesso effetto se scritto nella forma estesa
# if [ $(uname) == Darwin ]; then stat -x $1; else stat $1; fi
#!/bin/bash
#
# Prende come argomento una directory e fa il conto dei byte occupati dai file regolari al suo interno
if [ $(uname) == Darwin ]
then
find $1 -type f -exec stat -f%z {} \; 2>/dev/null | tr \\n +
echo 0;
elif [ $(uname == Linux ]
then
find $1 -type f -exec stat -c%s {} \; 2>/dev/null | tr \\n +
echo 0;
else
echo su che sistema operativo sei?
fi | bc
echo '$* =' $*
# Per richiamarlo da linea di comando: ./script.sh $(echo $PATH | tr : ' ')
#!/bin/bash
#
# Prende come rgomento una directory e cambia i nomi dei file all'interno sostituendo gli spazi con degli underscore
cd $1
for FILE in ./*
do
FILE1=$(basename "$FILE")
FILE2=$(echo "$FILE1" | tr ' ' _)
mv "$FILE" "$FILE2"
done
cd -
#!/bin/bash
#
# Prende come rgomento una directory e cambia i nomi dei file (solo file regolari) all'interno eliminando gli spazi
cd $1
for FILE in *
do
if [ -f "FILE" ]
then
FILE2=$(echo "$FILE" | tr -d ' ')
mv "$FILE" "$FILE2"
fi
done
cd -
#!/bin/bash
#
# Read from standard input
LINE=0
while (( LINE < 4096 )) && read buf[LINE]
do
echo -e $LINE \\t {buf[LINE]}
(( LINE = LINE + 1 ))
done
#!/bin/bash
#
# Esegue la lettura da un file
i=0
export i
while read d[i]
do
echo ${d[i]}
((i++))
done < ../manls
echo ${d[9]}
#!/bin/bash
#
# Associa un array di pid con un array contenente i rispettivi uid
arraypid=($(ps -e -opid=))
for i in $(echo ${arraypid[*]})
do
arrayuid[i]=$(ps -e -p $i -ouid=)
done
#!/bin/bash
#
# Rappresenta il grafico in tempo reale della percentuale di cpu utilizzata dal pid dato come parametro
if [ $# -ne 2 ]
then
echo './cpugraph.sh pid scala'
echo '1 =< scala >= 10'
exit
fi
pid=$1
scala=${2:-2} # Se il valore dato a scala è nullo o vuoto allora prende di default il valore 2
t=0
while true
do
b=$(echo "c=$scala*$(ps -p $1 -o%cpu= | tr , .); scale=0; c/1" | bc -l)
for (( a = 1; a < b; a++ ))
do
echo -n "-"
done
echo '*'
((t++))
done
#!/bin/bash
#
# Prende delle parole a caso dal dizionario italiano e compone una frase di 6 parole
c=($(cat /Users/myfolder/italian.txt))
LUNGHEZZA=${#c[*]}
echo ${c[$((RANDOM*RANDOM%LUNGHEZZA))]} \
${c[$((RANDOM*RANDOM%LUNGHEZZA))]} \
${c[$((RANDOM*RANDOM%LUNGHEZZA))]} \
${c[$((RANDOM*RANDOM%LUNGHEZZA))]} \
${c[$((RANDOM*RANDOM%LUNGHEZZA))]} \
${c[$((RANDOM*RANDOM%LUNGHEZZA))]} \
#!/bin/bash
#
# Print a sinusoid running with time
if [ $# -ne 1 ]
then
echo 'Usage export COLUMNS; ./sinusoide.sh frequenza'
exit
fi
if [ -z $COLUMNS ]
then
echo 'Usage export COLUMNS; ./sinusoide.sh frequenza'
exit
fi
AMPIEZZA=$(( COLUMNS/2 ))
FREQUENZA=$1
t=0
while true
do
b=$(echo "c=$AMPIEZZA*S($FREQUENZA*$t*3.14/180); scale=0; $AMPIEZZA + c/1" | bc -l)
for (( a = 1; a < b; a++ ))
do
echo -n " "
done
echo '*'
((t++))
done
#!/bin/bash
#
# Stampa la lista degli ip occupati
for (( a = 1; a < 255; a++ ))
do
if ping -o -t 1 10.0.12.$a < /dev/null
then
echo 10.0.12.$a
fi
done
#!/bin/bash
#
# Esegue il ping agli ip della propria rete
for i in $(ifconfig -a | grep UP | cut -d: -fi)
do
ifconfig $i | grep '\binet\b' | cut -d' ' -f2
done
for a in (!!) # !! significa il comando precedentemente dato
do
ping -c 1 $a
done
#!/bin/bash
#
# Stampa ad uno ad uno il proprietario dei processi contenuti nell'array arraypid
arraypid=($(ps -e -opid=))
for i in $(echo ${arraypid[*]})
do
echo processo $i eseguito da utente $(ps -p $i -ouid=)
done