Archivi tag: bash

Script per parallelizzare uno script in bash

#!/bin/bash

script=$1
pvalue=$2

cat $script | while read  line
do
    jobs=`jobs -r | wc -l`
    while [[ $jobs -eq $pvalue ]]
    do
             sleep 1
         jobs=`jobs -r | wc -l`
        done

        echo "executing $line"
    $line & 
done

Script inserito in /bin/parallelize.sh
L’idea e’ quella di avere un file (magari creato con un altro script) con una lista di comandi che vogliamo eseguire in parallelo – ad esempio – 5 comandi alla volta. Una volta che viene terminato un comando viene eseguito quello successivo nella lista.

Il comando da dare e’

parallelize.sh file_script 5
Annunci
Contrassegnato da tag , , ,

Creare thumbnails con ImageMagick

convert original.jpg -scale 220x220^ -gravity Center -crop 220x220+0+0 thumb.jpg

Avendo delle foto in una cartella “original” e volendo creare thumbnails nella cartella thumb:

ls -1 original/ | while read img; do echo $img; convert original/$img -scale 220x220^ -gravity Center -crop 220x220+0+0 thumb/$img; done
Contrassegnato da tag , , , , , ,

La variabile IFS di read

La variabile di sistema IFS viene utilizzato dal comando read per identificare il carattere divisore di un file csv.

Ecco un esempio per gestire un csv di input.
cat input_test.txt | while IFS=',' read campo1 campo2 campo3
do
echo "campo1 -> $campo1 ; campo2 -> $campo2 ; campo3 -> $campo3 "
done

Utilizzando il seguente “input_test.txt”….

a,b,c
1,2,3
primo,secondo,terzo

…otteniamo il seguente output

# sh testIFS.sh
campo1 -> a ; campo2 -> b ; campo3 -> c
campo1 -> 1 ; campo2 -> 2 ; campo3 -> 3
campo1 -> primo ; campo2 -> secondo ; campo3 -> terzo

Contrassegnato da tag , , , , , , , ,

Scaricare tutte le foto di flickr

#!/bin/bash
url= $1
wget "${url}" -O  - -o /dev/null | while read line
do
url=`echo $line | grep media:content | grep -E "http://.*.jpg" -o `
if [[ ${#url} -gt 0 ]]
then
title=''
while [[ ${#title} -eq 0  ]]
do

read line
title=`echo $line | grep media:title | grep -o ">.*<" | sed "s/>//" | sed "s/<//"`
done
echo "--------------------------------------"
echo "TITLE: $title"
echo "URL: $url"
wget "${url}" -O "${title}.jpg" -o /dev/null
fi

done
Contrassegnato da tag , , ,

Nohup – Staccarsi da terminale

Quando lanciamo un comando la shell genera un processo figlio. Molti di voi sanno che basta aggiungere il carattere & dopo il comando + argomenti per riavere la shell.

E’ anche vero che pero’ quando il terminale viene chiuso il processo si interrompe. Questo accade perche’ riceve un segnale hup.

Per ovviare a questo problema lanciamo la riga con nohop iniziale

nohup [command] &

Inoltre ci troveremo l’output del comando nel file nohup.out

Ecco un esempio di utilizzo:

nohup find . -name "*something*" -type f > altrofile.out
Contrassegnato da tag , ,

Bash, raccogliere argomenti

Con getopts é possibile raccogliere gli argomenti con cui viene eseguito uno script.
Ecco un esempio:

#!/bin/bash

LOG_NAME=´/var/log/mylog.log´
DIR=´/tmp/myscript/´

while getopts d:l option
do
  case "$option" in
    l) LOG_NAME=$OPTARG ;;
    d) DIR=$OPTARG ;;
  esac
done

ls -la $DIR >> $LOG_NAME
Contrassegnato da tag ,