Home | Computer | Foto-album | Grappig | Interessant | Projecten | Links | Gastenboek
Index | Commodore 64 | 8085 Emulator | Aedit | Linux scripts
Simpele Linux-scriptjes
Mij werd onlangs gevraagd om wat van mijn scriptjes online te zetten, er bleek dus behoefte te zijn aan vooral simpele scriptjes, dus daarom heb ik op deze pagina een aantal van mijn eigen (soms idd heel simpele) scriptjes online gezet...
Ik gebruik de map /usr/local/misc/ meestal om mijn zelfgemaakte zooi neer te zetten, soms staat die map in mijn scriptjes ook expliciet aangegeven...

1. Splitwav
Af en toe neem ik weleens een radioprogramma op, om deze op CD te fikken. Daarbij vind ik het handig als het radioprogramma verdeeld wordt over meerdere korte tracks, waardoor het makkelijker zoeken is naar een bepaalde passage. Daarom heb ik dit scriptje gemaakt, die een .wav file in stukjes van 5 minuten hakt. Bij een programma van bv. 58:26 minuten worden het dan dus 11 tracks van 5 minuten plus een 12e track van 3:26 minuten.
Het bestand /usr/local/misc/splitwav.dat bevat een cumulatieve tellerstand.

 /usr/local/misc/splitwav: hak een groot .wav bestand in stukjes van 5 minuten (tracks dus)
#!/bin/sh
#
# Dit scriptje knipt een groot .wav bestand in stukjes van 5 minuten.
# Geschreven in Q'n'D door Martin Meijerink op 15-2-2003
#
# gebruiksaanwijzing:
#
# splitwav /padnaam/filenaam.wav
#
# padnaam is verplicht, anders werkt het niet...

WERKMAP=/home/kelvyn/work

echo $(date +%T) Map $WERKMAP aanmaken...
mkdir -p $WERKMAP
cd $WERKMAP

echo $(date +%T) Zet $1 om naar $WERKMAP/rawdata...
sox "$1" -t raw -r 44100 -s -w -c2 rawdata

echo $(date +%T) rawdata in stukjes van 5 minuten hakken...
split -b 52920000 rawdata rawtrack.

echo $(date +%T) rawdata verwijderen...
rm rawdata

echo $(date +%T) alle rawtrackjes ff headertje geven en renamen...
for i in rawtrack.* ; do
echo $(date +%T) $i krijgt een headertje...
sox -t raw -r 44100 -s -w -c2 "$i" "$i.wav"
count=$(cat /usr/local/misc/splitwav.dat)
echo $(date +%T) $i heet nu Track $(echo $count|cut -c2-).wav...
mv "$i.wav" "Track $(echo $count|cut -c2-).wav"
count=$[count+1]
echo -n $count >/usr/local/misc/splitwav.dat
rm "$i"
done

echo $(date +%T) Klaar! De tracks staan klaar om gefikt te worden in $WERKMAP


2. Laat zien welke dag het vandaag is
Spreekt voor zich dacht ik toch...

 /usr/local/misc/dag: laat zien wat voor dag het vandaag is
#!/bin/sh
case $(date +%w) in 0) d=zon ;; 1) d=maan ;; 2) d=dins ;; 3) d=woens ;; 4) d=donder ;; 5) d=vrij ;; 6) d=zater ;; esac
echo Het is "$d"dag vandaag...


3. Roteer jpg-bestand
Hier is eigenlijk al een tooltje voor, welke door dit scriptje dus wordt gebruikt.
Wat ik wel altijd belangrijk vind, is de datum en tijd van een bestand, deze blijft dus in het nieuwe bestand gehandhaafd.

 /usr/local/misc/rotate: Roteer een jpgtje 90 graden rechtsom
#!/bin/sh
#
# Dit scriptje roteert een jpg 90 graden rechtsom.
# Na afloop bevat het bestand ook weer de originele datum en tijd,
#
# Geschreven door Martin Meijerink op 17 juli 2003
#
# gebruik:
# 
#   rotate <bestand.jpg>
#
# Het maakt hierbij niet uit of de volledige padnaam wel of niet wordt opgegeven.

if [ $# = 0 ] ; then
    echo Foutje: geen bestand opgegeven. Syntaxis: $0 \<bestand.jpg\> \(met of zonder pad\)
    exit
fi

if ( test -e $1 ); then

tempfile=/tmp/$1-$(date +%s)
/usr/bin/jpegtran -rot 90 $1 > $tempfile
/usr/bin/touch --reference=$1 $tempfile
mv $tempfile $1

else
    echo Foutje: bestand $1 bestaat niet.
    exit
fi


4. Wake On Lan
Scriptje om dmv de tool ether-wake een computer aan te zetten door in te tikken 'wol <computernaam>'
In het bestand /etc/mac moeten dan de mac-addressen van je computers gezet worden:
 /etc/mac:
# Dit bestand bevat mac-addressen van diverse pc's,
# wordt gebruikt voor wake-on lan
# 12 aug 2003 m.meijerink
#

00:50:da:41:17:04 monaghan
00:d0:59:65:1b:b7 mullingar
00:D0:59:4A:EC:92 armagh
00:0C:6E:12:FD:36 belfast

 /usr/local/misc/wol:
#!/bin/sh
/usr/local/misc/ether-wake $(grep $1 /etc/mac|gawk {'print $1'})


5. Inloggen op PC die uit staat
Hierbij wordt gebruik gemaakt van bovenstaand scriptje.
Er kan dan worden ingelogd via ssh, waarbij de PC die uit staat eerst wordt aangezet, waarna er netjes een halve minuut wordt gewacht tot ie wordt verwacht opgestart te zijn...

 /usr/local/misc/sshbelfast:
#!/bin/sh
# Dit scriptje gebruik ik op op belfast in te loggen wanneer deze uit staat!

# Eerst dmv wake-on lan computer aanzetten
/usr/local/misc/wol belfast

# 35 seconden wachten...
echo Het opstarten van belfast duurt een half minuutje...
echo "Nog    seconden wachten..."
for i in $(seq 135 101);do echo -e "\033[1A\r\033[3C" $(echo $i|cut -c2-);sleep 1;done
echo -e "\rBelfast moet nu opgestart zijn, ssh wordt dus gestart..."

# inloggen
ssh belfast


6. bmp naar png omzetten
Daarbij ook weer de datum en tijd handhaven.
 /usr/local/misc/bmp2png:
#!/bin/sh
#
# simpel bmp naar png omzetscriptje
# door martin meijerink
# 23 november 2003
#
# gebruik:
#
# 'bmp2png <file(s)>'
# mag meerdere bestanden opgeven, mag ook in een map met .bmp's en andere files door elkaar
# gewoon opgeven 'bmp2png *', dan worden alleen de bestanden die op .bmp of .BMP eindigen.
#
# aangezien dit meer een klein hulpmiddel voor eigen gebruik is, is dit programmatje niet
# echt foolproof, als een bestandsextensie upper en lowercase door elkaar heeft (.Bmp of bMp ofzo)
# dan gaat het mis. verder worden wel de datum en tijd meegenomen, maar niet de permissiebits enz.
#
# moet verder ook geen dirs opgeven.

if [ "$#" == "0" ]; then
        echo "geen bestand opgegeven"
        exit 1
fi
while (( "$#" )); do
  if echo "$1"|grep -i ".bmp$" >/dev/null;then
    file=$(echo -n $1|sed s/.bmp$//|sed s/.BMP$//)
    ls -l "$file.$(echo -n "$1"|tail -c3)"
    convert "$file.$(echo -n "$1"|tail -c3)" "$file.png"
    touch "$file.png" --reference="$file.$(echo -n "$1"|tail -c3)"
    rm "$file.$(echo -n "$1"|tail -c3)"
    ls -l "$file.png"
  fi
  shift
done


7. Op homepage laten zien welke muziek ik op heb staan (en op mijn eigen desktop).
Om muziek te beluisteren gebruik ik XMMS Versie 1.2.10.
In XMMS gebruik ik de plugin Song Change 1.2.10, en wat dit programma doet is elke keer als er een nieuwe track wordt gestart (in mijn geval) het volledige pad van deze track doorgeven aan een bash-scriptje. Hierin maak ik gebruik van eyeD3, een tooltje om data uit een mp3-bestand te bekijken/bewerken. De data die hier uit komt is alleen niet zo heel erg scriptvriendelijk, dus ik moest nog heel wat string-manipulaties er op los laten om bepaalde gegevens zoals genre, artist, album, track, title enz er netjes uit te vissen.
eyeD3 gooit de data er nl. als volgt uit:
title: Slip             artist: Six Feet Deep
album: The road less traveled           year: 1997
track: 3                genre: Metal (id 9)
Verder plaatst het script ook nog een popup rechtsonder in het scherm op mijn desktop:
Dit doe ik met notify-send.

Het bash-scriptje ziet er als volgt uit:
 /usr/local/misc/currentsong:
#!/bin/bash
# Newline definieren:
nl='
'
# even een tijdelijke map aanmaken
dir=$(mktemp -d)

# Uit het mp3tje de cover exporteren:
eyeD3 -i $dir "$*"

# De cover omzetten naar 120x120 pixels
convert $dir/FRONT_COVER* -scale 120x120 $dir/cover.png

# Overige data in een bestandje zetten
eyeD3 --no-color "$*" >$dir/id3data

# Genre eruit vissen (met sed zet ik ampersand om naar de html special characters
genre=$(echo $(grep genre: $dir/id3data|sed s/\&/\&amp\;/))
# genre is nu 'track: 3                genre: Metal (id 9)'
genre=${genre#*genre:\ }
# genre is nu 'Metal (id 9)'
genre=${genre%%(*}
# genre is nu 'Metal ' (incl. spatie, maar dat maakt hier even niet uit)

artist=$(echo $(grep artist: $dir/id3data|sed s/\&/\&amp\;/))
# artist is nu 'title: Slip             artist: Six Feet Deep'
artist=${artist#*artist:\ }
# artist is nu 'Six Feet Deep'

album=$(echo $(grep ^album: $dir/id3data|sed s/\&/\&amp\;/))
# album is nu 'album: The road less traveled           year: 1997'
album=${album#*album:\ }
# album is nu 'The road less traveled           year: 1997'
album=${album%%year:*}
# album is nu 'The road less traveled           ' (ook weer veel spaties erachter, maar dat geeft niet)

title=$(echo $(grep ^title: $dir/id3data|sed s/\&/\&amp\;/))
# title is nu 'title: Slip             artist: Six Feet Deep'
title=${title#*title:\ }
# title is nu 'Slip             artist: Six Feet Deep'
title=${title%%artist:*}
# title is nu 'Slip             '

# Sommige mp3's gebruiken maar 1 cijfer in het track-veld, maar 2 vind ik beter, dus:
track=$(printf "%02d\n" $(grep track: $dir/id3data|cut -d\: -f2|sed s/genre$//|sed s/\&/\&amp\;/))

# Ook het jaar nog even eruit vissen:
year=$(echo $(grep year: $dir/id3data|sed s/\&/\&amp\;/))
year=${year#*year:\ }

# 20100814 Ook even voor mijn homepage:
# de map /public/ op mijn werkstation komt overeen met http://www.kelvyn.nl/public/
cp -af $dir/cover.png /public/
datum=$(date +%Y%m%d%H:%M)
# Even een stukje html produceren:
echo '<br>
<b>Muziek</b><br>
Vanaf '${datum:6:2} $(echo januari februari maart april mei juni juli augustus september oktober nove
mber december|cut -d\  -f${datum:4:2}) ${datum:0:4}' om '${datum:8:5}' luister ik naar:<br>
<img src="/public/cover.png" width="120" height="120" align="left"><br>
<b>Artiest:</b> '$artist'<br>
<b>Album:</b> '$album'<br>
<b>Track:</b> '$track $title'<br>'>/public/currentsong.html

# Ook even een desktop-notification doen:
notify-send -i $dir/cover.png " " "$nl<b>Genre:</b> $genre$nl<b>Artist:</b> $artist$nl<b>Album:</b> $al
bum$nl<b>Track:</b> $track $title$nl<b>Year:</b> $year" -t 60000

# en de rommel weer opruimen:
rm $dir/FRONT_COVER* $dir/cover.png $dir/id3data
rmdir $dir


© 1986-2010 Martin Meijerink.   Last update: