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