Script

Från DannoWiki
Version från den 7 juli 2026 kl. 19.35 av Danno (diskussion | bidrag) (Skapade sidan med '{{mall:under utveckling}} Kategori:Datorer_Data_och_Program lathund för shellscript kommer att finnas här! =Enkel if-sats= Kolla om en fil finns, och skriv ut resultatet: if [ -e "fil.txt" ]; then echo "Finns"; else echo "finns ej"; fi Ett bash-script som frågar om du vill eller inte: #!/bin/bash echo "vill du?" echo "[j/n]" read fraga if [ $fraga = "j" ] then echo "Du vill!!" else echo "VA? vill du inte?" fi exit 0 Vill vi ha fler val ersätte...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigeringHoppa till sök
 ⚠️ Den här artikeln är under utveckling. Information kan vara ofullständig eller ändras löpande.

lathund för shellscript kommer att finnas här!

Enkel if-sats

Kolla om en fil finns, och skriv ut resultatet:

if [ -e "fil.txt" ]; then echo "Finns"; else echo "finns ej"; fi

Ett bash-script som frågar om du vill eller inte:

#!/bin/bash
echo "vill du?"
echo "[j/n]"
read fraga

if [ $fraga = "j" ]
then
  echo "Du vill!!"
else
  echo "VA? vill du inte?"
fi

exit 0

Vill vi ha fler val ersätter vi if-satsen mot case:

case "$fraga" in
j)
  echo "Du valde JA"
  ;;
n)
  echo "Du valde NEJ"
  ;;
*)
  echo "Vänligen svara j eller n"
  ;;

esac

Gökur

Rolig grej, eller skojja med kompis/kollega:
Ladda hem cockoo.ogg
geekur.sh:

#/bin/bash
#
for i in $(seq 1 `(date +%H)`)
do
  eject
  ogg123 -q cockoo.ogg
  eject -t
done

Lägg till i /etc/crontab:

0 * * * * sh geekur.sh

Vill du istället ha 12-timmars, använder du

date +%I

Konvertera bilder

Enkelt script som använder convert för att storleksändra alla jpeg-bilder i samma katalog:

#!/bin/bash
#

FILES="*.jpg
*.JPG"
for i in $FILES
do
  echo $i
  convert -resize 'x75>' -resize '75>' $i $i
done

exit 0

Ta reda på IP-adress

Detta script tar reda på din publika och privata IP-Adress
samt skriver dessa i en textfil:

#!/bin/bash
#
# Detta script tar reda på publik IP och intern IP
# Informationen skrivs i filen ipinfo.txt
#

# tanka hem index.html från dyndns.com:
wget -q http://checkip.dyndns.com

# Hämta IP-Adressen som finns mellan BODY-taggarna:
echo "Publik IP:" > ipinfo.txt
cat index.html | awk ' { sub (/<\/body><\/html>/, ""); print $6}' >> ipinfo.txt

# Hämta intern IP-adress:
echo "Privat IP" >> ipinfo.txt
ifconfig eth0 | grep -v inet6 | awk '/inet/,// { sub (/addr:/, ""); print $2 >> "ipinfo.txt"}'

# Deleta index.html:
rm index.html

Mycket användbart om det ingår i ett större script,
tillexempel en backupp.

Printa variabler

Printa variabeldata utan RIP är inte helt lätt.
Du kan använda OpenOffice.org, men om du har ett DTP-program såsom Scribus, så har du ju en PDF, eller postscriptfil när du är klar.

Postscript

Först: Det går att lägga in variabeldata i postscript
Jag har ännu inte hittat den perfekta lösningen, men det jag ska beskriva nedan fungerar.
Först fixar du databasen.
Det är enkelt, du sparar helt enkelt en kommaseparerad .csv-fil.
Du måste givetvis ha gjort en .ps fil också.
Så scriptet:

#!/bin/bash
IFS=,
while read Knr Grupp Kund Referens Adress1 Adress2 Postadress
do
 echo "$Knr"
 echo "$Kund"
 echo "$Referens"
 echo "$Adress1"
 echo "Adress2"
 echo "Postadress"

 sed -e "s/\%\%Page\: 1 1/\%\%Page\: 1 1\ngsave\n\/Courier\ 10\ selectfont\n950\ 830\ moveto\n("$Kund"\ \ "$Knr")\ show\n950\ 820\ moveto\n("$Adress1")\ show\n950\ 810\ moveto\n("$Adress2")\ show\n950\ 800\ moveto\n("$Postadress")\ show\ngrestore/g" < infil.ps > $Knr.ps

done < databas.csv

echo gör inget annat än att skriva ut variablerna scriptet läser in, på skärmen.
Bara för att visa att det går att använda csv-filer till mer än just postscript.
Raden med sed är den som hittar rätt ställe i .ps-filen, och stoppar in variablerna.
Se sidan om Postscript.

Detta fungerar utmärkt, MEN:
Eftersom det i detta fallet handlar om postscript, så måste specialtecken som &-tecken, dubbel-escapas i databasen.
Detta eftersom scriptet "tar bort" det ena escapetecknet.
Annars kan postscript ta det som ett kommando, och resultatet blir tokigt.
Nästa "bug", märkte jag, är att våra språkliga specialtecken inte fungerar trots escape.
Alltså, har vi åäö men i databasen, kommer det inte att fungera.
Det är inte omöjligt att det går att komma runt på något sätt.

PDF

Ännu enklare, egentligen!
Skapa först brevet som ska adresseras, vi kallar det sid1.pdf
Sen databasen, här använder jag OpenOffice.org, och gör en tom sida, med kopplingsinformation, på rätt position.
Denna skrivs sedan ut till PDF-skrivare, OBSERVERA att det ska bli enstaka utskrifter, dvs. en PDF per adress.
Adresserna kommer att få filnamn som svk16_-_2.pdf
Lägg adress-PDF:erna ovanpå brevet:

for i in sv*.pdf; do pdftk sid1.pdf stamp $i output a$i; done;

Du har nu nya PDF:er med samma namn som adresserna, men med bokstaven a framför.
Och det är klart.
Har du en baksida, eller ännu fler sidor som ska in, lägger du till dessa med:

for i in asv*.pdf; do pdftk A=$i B=sid2.pdf cat A1 B1 output z$i; done;

Så där. Nya filer igen, nu med bokstaven z först i filnamnet.
Bara att ta bort de första, och övrigt du inte vill ha kvar. Sedan printa.
Notera dock att de printas i ordning, men den första kommer att komma sist,
beroende på att den inte fick numreringen.
Se även: Pdftk