• Hem
  • Nerladdning
  • LoCo-forum
  • Support-forum
  • Dokumentation
  • Bloggar
  • Chatt
  • Sändlista

Meny

  • Om gemenskapen
  • Om Ubuntu
  • Fadderprogrammet
  • Terminalskolan
  • Nyheter
  • Länkar
  • Medlemskarta
  • Bloggar
  • Innehåll
  • Sök
  • Logga in

Mera shellscript

Riktigt sugen på ett skript är man ju om man ska göra någonting upprepat många gånger, som när man kommer hem med minneskortet fullt i kameran och vill ha lite käckare namn än dsc_0311.jpg på sina bilder. Vi vill alltså döpa om våra bilder. Ändra namn på allihopa!

Vi har alltså en mapp med bilder:

$ ls
dsc_0310.jpg  dsc_0311.jpg  dsc_0312.jpg  dsc_0313.jpg  dsc_0314.jpg

Och hackar i hop någonting i den här stilen. Lugn, jag kommer att försöka förklara hur det funkar.

#!/bin/bash

NUMMER=1

for FIL in $( ls *jpg ); do
        mv $FIL $NUMMER.jpg
        let NUMMER=$NUMMER+1
done

Gör programmet körbart (chmod, se förra avsnittet) och kör det.

$ chmod a+x rp

$ ./rp

$ ls
1.jpg  2.jpg  3.jpg  4.jpg  5.jpg 

Nu ska jag försöka förklara

NUMMER=1 vi kastar in talet ett i en "låda" med etiketten NUMMER, för att se'n kika på innehållet i lådan skriver vi $NUMMER. En sådan "låda" kallas på nördiska en variabel.

for FIL in $( ls *jpg ); do (...) done Vi kör ett ls och för varje jpg-fil som dyker upp ska vi göra allt som står innan done. Filnamnen stoppar vi ett efter ett in i "lådan" FILE.

mv $FIL $NUMMER.jpg Här plockar vi ut innehållet i lådorna. Första varvet i snurran blir det alltså mv dsc_0310.jpg 1.jpg

Uppgifter

Nu är ju 1.jpg osv inte så himla kul filnamn heller...

  1. Försök göra ett skript som döper bilderna till semester_08_1.jpg, semester_08_2.jpg osv i stället
  2. Försök förbättra skriptet så att man när man skriver kommandot väljer vad alla bilder ska heta, exempelvis:

rp jul_08   (om vi döper skriptet till rp "rename pix") ger bilderna jul_08_1.jpg, jul_08_2.jpg osv.

Ledtrådar: man bash,
http://www.linuxconfig.org/Bash_scripting_Tutorial#Passing_arguments_to_the_bash_script

‹ Egna kommandon upp