Tips en Trucs 2017

Accolades

Linux terminal gebruikers schrijven voor het automatiseren van taken scripts. Maar ook bij eenvoudige opdrachten kan je reeds automatiseren. Door gebruik te maken van accolades kan je een opdracht met één opdrachtregel namelijk verschillende keren uitvoeren. Vooral handig bij het manipuleren van een reeks bestanden en/of mappen.

Met de touch opdracht kan je lege bestanden aanmaken. De volgende opdracht maakt het bestand met de naam abc.txt aan:

dany@laptop:~> touch abc.txt

En het bewijs dat het bestand werd aangemaakt:

dany@laptop:~> ls -l abc.txt
-rw-r--r-- 1 dany users 0 14 jul 15:28 abc.txt

Een bestand verwijder je met de rm opdracht:

dany@laptop:~> rm abc.txt

Met de volgende opdracht maak je met één opdracht vijf bestanden aan met de namen abc cde efg hij en klm:

dany@laptop:~> touch abc cde efg hij klm
dany@laptop:~> ls -l abc cde efg hij klm
-rw-r--r-- 1 dany users 0 14 jul 15:31 abc
-rw-r--r-- 1 dany users 0 14 jul 15:31 cde
-rw-r--r-- 1 dany users 0 14 jul 15:31 efg
-rw-r--r-- 1 dany users 0 14 jul 15:31 hij
-rw-r--r-- 1 dany users 0 14 jul 15:31 klm

Deze pas aangemaakte bestanden verwijder je met:

dany@laptop:~> rm abc cde efg hij klm

Wil je 20 bestanden aanmaken met de namen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20, dan kan je de volgende opdracht gebruiken:

dany@laptop:~> touch 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
dany@laptop:~> ls -l 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-rw-r--r-- 1 dany users 0 14 jul 15:36 1
-rw-r--r-- 1 dany users 0 14 jul 15:36 10
-rw-r--r-- 1 dany users 0 14 jul 15:36 11
-rw-r--r-- 1 dany users 0 14 jul 15:36 12
-rw-r--r-- 1 dany users 0 14 jul 15:36 13
-rw-r--r-- 1 dany users 0 14 jul 15:36 14
-rw-r--r-- 1 dany users 0 14 jul 15:36 15
-rw-r--r-- 1 dany users 0 14 jul 15:36 16
-rw-r--r-- 1 dany users 0 14 jul 15:36 17
-rw-r--r-- 1 dany users 0 14 jul 15:36 18
-rw-r--r-- 1 dany users 0 14 jul 15:36 19
-rw-r--r-- 1 dany users 0 14 jul 15:36 2
-rw-r--r-- 1 dany users 0 14 jul 15:36 20
-rw-r--r-- 1 dany users 0 14 jul 15:36 3
-rw-r--r-- 1 dany users 0 14 jul 15:36 4
-rw-r--r-- 1 dany users 0 14 jul 15:36 5
-rw-r--r-- 1 dany users 0 14 jul 15:36 6
-rw-r--r-- 1 dany users 0 14 jul 15:36 7
-rw-r--r-- 1 dany users 0 14 jul 15:36 8
-rw-r--r-- 1 dany users 0 14 jul 15:36 9

In plaats van alle aan te maken bestandsnamen op te sommen, kunnen we gebruik maken van een teller. Een teller plaats je tussen accolades. Onze vorige opdracht wordt dan:

dany@laptop:~> touch {1..20}

Wat tussen accolades staat wordt door uw shell-omgeving (bash) omgezet naar getallen van 1 tot en met 20. Op dezelfde manier wis je pas aangemaakte bestanden met:

dany@laptop:~> rm {1..20}

Om tekstbestanden aan te maken met namen van 1.txt tot 1000.txt gebruikt je de accolades voor de teller gevolgd door het achtervoegsel .txt:

dany@laptop:~> touch {1..1000}.txt

Op dezelfde manier werkt je met voorvoegsels of beiden tegelijk:

dany@laptop:~> touch a{1..1000}.txt

Beide bestandenreeksen verwijder je met:

dany@laptop:~> rm a{1..1000}.txt {1..1000}.txt

Met de echo opdracht kan je tekst in een bestand plaatsen. Met de volgende opdracht plaats 10 genummerde lege regels in een bestand:

dany@laptop:~> echo {1..10} > tellentottien.txt
dany@laptop:~> cat tellentottien.txt 
1 2 3 4 5 6 7 8 9 10

De laatste opdracht toont ons de inhoud van het pas aangemaakte bestand. We verwijderen dit bestand met:

dany@laptop:~> rm tellentottien.txt

Alfabetische tellers zijn eveneens mogelijk. Het alfabet geef je weer met:

dany@laptop:~> echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

Met hoofdletters:

dany@laptop:~> echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Meerdere tellers kan je combineren:

dany@laptop:~> echo {a..z}{0..9}
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 g0 g1 g2 g3 g4 g5 g6 g7 g8 g9 h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 j0 j1 j2 j3 j4 j5 j6 j7 j8 j9 k0 k1 k2 k3 k4 k5 k6 k7 k8 k9 l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 n0 n1 n2 n3 n4 n5 n6 n7 n8 n9 o0 o1 o2 o3 o4 o5 o6 o7 o8 o9 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 u0 u1 u2 u3 u4 u5 u6 u7 u8 u9 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 z0 z1 z2 z3 z4 z5 z6 z7 z8 z9

Ook de stapgrootte van tellers kan je instellen, alle onpare getallen tussen 1 en 100 geef je weer met:

dany@laptop:~> echo {1..100..2}
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99

Nog een praktisch voorbeeld. We maken mappen aan voor elke maand en elke dag van het jaar met:

dany@laptop:~> mkdir -p 2017/{1..12}/{1..30}

Deze map verwijderen we terug met:

dany@laptop:~> rm -r 2017

Niets belet ons om tellers ook in scripts te gebruiken. Het volgende script typ je in KWrite in:

#!/bin/bash
for i in {1..10}; do
  echo "Huidig getal is $i"
done
KWrite

Eerst maak je script uitvoerbaar en daarna kan je het pas starten.

dany@laptop:~> chmod +x tellen.sh
dany@laptop:~> ./tellen.sh 
Huidig getal is 1
Huidig getal is 2
Huidig getal is 3
Huidig getal is 4
Huidig getal is 5
Huidig getal is 6
Huidig getal is 7
Huidig getal is 8
Huidig getal is 9
Huidig getal is 10