Archive

Posts Tagged ‘bash’

bash scripting: change delim using for

gennaio 7, 2013 Commenti disabilitati

Usually when I write shell script I prefer to use the statement “for”.
But there’s a problem: by default the ‘for’ get every single word.

That’s because if not specified¬†the ‘for’ use as delimiter the space character (” “).
So, if I want to work with several word in a single iteration i need to change the delimiter.

That’s easy!
To change the delimiter you just need to change the variable IFS.

Let’s see some code:


LOGFILE=/var/log/mylogfile.log
IFS=";"                              # change delimiter in ";" (magic)
EXCEPTIONS="timeout;java.somerror;a lot of errors"    # my exception 
for word in $EXCEPTIONS;do
    echo -n "Check Exception: \"$word\" ..."         # escape "
    N=$(grep -ic $word $LOGFILE)                     # check log
    if [ $N -gt 0 ];then                             # if found
        echo -e "\nWARNING: Found $N exception:\"$word\"" # print 
    else
        echo "None"                                  # else no
    fi
done

output:


> Check Exception: "timeout"...None
> Check Exception: "java.somerror"...None
> Check Exception: "a lot of errors"...
WARNING: Found 3 exception "a lot of errors"

That’s an easy way to use the ‘for’ statement even if usually cant and so you can write good code.
enjoy ūüôā

Categorie:linux Tag:, , , , , , ,

edit a string in multiple files: sed -ic

ottobre 19, 2012 1 commento

Sed is a great tool used to edit one line if needed for multiple files without open it.
Usually to do this, you just need to:

1. Looking for the right regular expression:

grep -re “user” /my/dir

2. Inject the update string

sed -ic ‘s/user/newuser/g’ <filename>

3. Enjoy!

 

WARNING : the option “-c” is needed to preservate the owner of the file, if not set the file change permission with the actual owner.

Categorie:linux Tag:, , , ,

Timeout

ottobre 19, 2012 Commenti disabilitati

Trucchetti in bash:

In Linux con coreutils >= 7.0 è possibile lanciare il comando timeout da commandline,
es:

timeout 1 sleep 1000

Ad esempio per lanciare un tcpdump per 10 secondi possiamo scrivere:

timeout 10 sudo tcpdump -ni eth0 -w /tmp/test.pcap

Enjoy

Categorie:linux Tag:, , ,

mdb2mysql

febbraio 4, 2010 Commenti disabilitati

Ecco come convertire un file MS Access (mdb)  dentro un database mysql

1. Installare il pacchetto mdbtool e se non lo si ha già anche mysql

sudo aptitude install mdbtool mysql -y

2. Crearsi un utente mysql con username identico al profilo e disabilitare la password, questo server per effettuare le operazioni pi√Ļ velocemente senza digitare la password ogni volta. Ma non √® il massimo se lo vediamo dal punto di vista della sicurezza…

echo "CREATE USER '$USERNAME'@localhost IDENTIFYED BY '';" | mysql -u root
echo "GRANT ALL PRIVILEGES ON *.* TO '$USERNAME'@'localhost' | mysql -u root

3. Eseguire lo script mdb2mysql per convertire il file in una struttura SQL:

#!bin/bash
# Author: s@mba - GPLv3

usage(){
 if [ "$@" != "" ] ;then
 echo "$@"
 else
 echo "$0 [ option ] [ file.mdb ]
 Usage
 -help        Show this help
 -debug        Print in debug mode
 -view        Print only what to do
 -db        Set the new DB to create in mysql
 "
 fi
 exit 1
}
which mdb-schema 2&gt;&amp;1 /dev/null || usage "Before install mdbtool!"
which mysql 2&gt;&amp;1 /dev/null || usage "Before install mysql!"
[ $# -eq 0 ] &amp;&amp; usage

while $[ $# -ne 1 ];do
 case $1 in
 -d|-db)    DBNAME=$1
 ;;
 -view)    VIEW=1
 ;;
 -debug)    DEBUG=1
 ;;
 *)    usage
 esac
 shift
done

[ $# -eq 0 ] &amp;&amp; usage "Specify file.mdb !"

MDBFILE=$1    

[ $VIEW ] &amp;&amp; echo "1. Get the schema and create in DB '$DBNAME'"
[ $DEBUG ] &amp;&amp; mdb-schema $MDBFILE mysql 

# This works only if run mysql with your username and profile is NOPASSOWRD
mdb-schema es1.mdb mysql   | grep -vE "DROP|^-"  | mysql -f  $DBNAME

[ $VIEW ] &amp;&amp; echo "2. Export data from $MDBFILE to $DBNAME"
for i in $(mdb-tables $MDBFILE);do
 mdb-export -I -R ';\n' $MDBFILE $i
done &gt; $FILE_EXPORT
[ $DEBUG ] &amp;&amp; cat $FILE_EXPORT

cat $FILE_EXPORT | mysql -f $DBNAME

[ $? -eq 0] && echo "Export Successfully!" || echo "Error: some problem in export operation"
exit 0

provare per credere…

Categorie:linux Tag:, , , , , , ,

il terminale nero le directory blu scuro

agosto 6, 2009 Commenti disabilitati

Un fastidio enorme, fai un ls e ci metti un ora a capire come si chiama quella cartella blu scura, a volte fa talmente incazzare che fai un bel :

rm -rf dir*

che non √® proprio carino… anzi magari becchi proprio quella che non dovevi.

Ora ho scoperto che basta settare una variabile e tutto per incanto sparisce ,

export LS_COLORS='di=01;36'

poi prova a dare dal tuo terminale un bel ls e scoprirai che…

…il cucchiaio non esiste

ovviamente io ho scelto il blu ciano ma si può scegliere ogni colore disponibile. Per sapere che colori ha il tuo terminale prova questo script:

# samba took this

esc="33["
echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43"
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
for fore in 30 31 32 33 34 35 36 37; do
        line1="$fore  "
        line2="    "
        for back in 40 41 42 43 44 45 46 47; do
                line1="${line1}${esc}${back};${fore}m Normal
                ${esc}0m"
                line2="${line2}${esc}${back};${fore};1m Bold
        ${esc}0m"
        done
        echo -e "$line1\n$line2"
done
esc="33["
       echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43"
       echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
       for fore in 30 31 32 33 34 35 36 37; do
         line1="$fore  "
         line2="    "
         for back in 40 41 42 43 44 45 46 47; do
         line1="${line1}${esc}${back};${fore}m Normal
         ${esc}0m"
         line2="${line2}${esc}${back};${fore};1m Bold
         ${esc}0m"

         done
       echo -e "$line1\n$line2"
       done
Categorie:varie Tag:, , , , ,

tip to restore del file

luglio 15, 2009 Commenti disabilitati
C'è un modo per recuperare al volo un file che si stava usando e si è cancellato per sbaglio:

1. open with less command your file
   $  less testfile.txt

2. open another terminal and remove it
   $  rm testfile.txt
Ora in teoria sei fottuto, il file è cancellato infatti:
   $ ls testfile.txt
   ls: testfile.txt: No such file or directory

Ma noi abbiamo ancore un less aperto per quel file, quindi:

3. lsof | grep testfile.txt

less	4607	samba  4r  REG 254,4   21  8880214 /home/samba/testing.txt (deleted)
        ^^^^           ^^^
Dalla seconda e quarta colonna ottengo le informazioni necessarie per ripristinare il file:

   $ cp /proc/4607/fd/4 testing.txt.bk

ps: attenzione a non usare l'opzione cp -a , che lo copia come link simbolico.

Categorie:varie Tag:, , , ,