Script
⚠️ 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!
PRO-tips
Lägg till dina script i systemets PATH-variabel
så kan du bara skriva namnet på scriptet utan sökväg:
- Skapa mappen
~/scripts - Placera alla dina hemmasnickrade script där.
- Lägg till följande i din ~/.bashrc:
if [ -d "$HOME/scripts" ] ; then
PATH="$HOME/scripts:$PATH"
fi
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
fixaudio
En dag när jag kom hem, och startade en dator som varit avstängd, fanns inget ljud ut.
Testade olika lösningar, ominstallation av program, mm. inget hjälpte.
Efter en omstart, fungerade ljudet helt plötsligt.
Lite "forskning" visade att det är inte ovanligt att vissa ljud-program får "hicka" efter att ha varit avstängd.
Följande kan lösa problemet utan reboot:
Skapa scriptet fixaudio i lämplig mapp, (jag väljer ~/scripts)som startar om berörda tjänster:
#!/bin/bash # Nollställ PipeWire och WirePlumber utan att stänga av systemet echo "Startar om PipeWire-ljudservrarna..." systemctl --user restart pipewire pipewire-pulse wireplumber echo "Klart! Testa ljudet igen."
Gör det körbart:
chmod +x ~/scripts/fixaudio
Förhoppningsvis var det bara en tillfällig HDMI-/hårdvaruhicka vid uppstarten och ingenting som kommer tillbaka.
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.
Ä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