(1) s1 = s2
(2) s1 != s2
(3) s1 < s2
(4) s1 > s2
(5) -n s1
(6) -z s1
(1) s1 komt overeen met s2
(2) s1 komt niet overeen met s2
(3) __TO-DO__
(4) __TO-DO__
(5) s1 is niet gelijk aan null (bevat één of meer tekens)
(6) s1 is null
Vergelijken van twee strings.
#!/bin/bash
S1='string'
S2='String'
if [ $S1=$S2 ];
then
echo "S1('$S1') is niet gelijk aan S2('$S2')"
fi
if [ $S1=$S1 ];
then
echo "S1('$S1') is gelijk aan S1('$S1')"
fi
Ik haal hier een opmerking aan vanuit een mail ingezonden door Andreas Beck, verwijzend naar het gebruik van if [ $1 = $2 ].
Dit is niet zo'n goed idee, omdat als $S1 of $S2 leeg is, je een parse error krijgt. x$1=x$2 of "$1"="$2" is beter.
+
-
*
/
% (rest)
-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
C programmeurs zouden de operator eenvoudigweg indelen naar de overeenkomstige haakjes.
Deze sectie werd door Kees herschreven (zie met dank aan...)
Een paar van deze opdrachten zijn bijna volledige programmeertalen. Van deze opdrachten wordt alleen de basis uitgelegd. Voor een meer gedetailleerde beschrijving, kun je de man pages van de opdrachten raadplegen.
sed (stream editor)
Sed is een niet interactieve editor. In plaats dat een bestand wordt aangepast door de cursor op het scherm te verplaatsen, maak je gebruik van een script met de sed-instructies en geef je deze als argument samen met het te wijzigen bestand op aan sed. Je kunt sed ook als een filter beschrijven. Laten we eens wat voorbeelden bekijken:
$sed 's/te_vervangen/vervangen_door/g' /tmp/dummy
Sed vervangt de string 'te_vervangen' door de string 'vervangen_door' en leest vanuit het /tmp/dummy bestand. Het resultaat zal naar stdout (normaal gesproken de console) worden gezonden, maar je kunt aan het einde van deze regel ook '> capture' toevoegen waardoor sed de uitvoer naar het bestand 'capture' zal sturen.
$sed 12, 18d /tmp/dummy
Sed laat alle regels zien behalve de regels 12 tot 18. Het oorspronkelijke bestand wordt door deze opdracht niet aangepast.
awk (manipulatie van gegevensbestanden, ophalen en verwerken van tekst)
Er bestaan veel implementaties van de programmeertaal AWK (de bekendste interpreters zijn GNU's gawk en 'new awk' mawk.) Het principe is eenvoudig: AWK scant op een patroon, en voor ieder overeenkomend patroon zal een actie worden uitgevoerd.
Wederom heb ik een dummy-bestand aangemaakt met de volgende regels:
"test123
test
tteesstt"
$awk '/test/ {print}' /tmp/dummy
test123
test
Het patroon waar AWK naar zoekt, is 'test' en de actie die het uitvoert wanneer het een regel in het bestand /tmp/dummy met de string 'test' vindt, is `print'.
$awk '/test/ {i=i+1} END {print i}' /tmp/dummy
3
Wanneer je naar meer patronen zoekt, kun je de tekst tussen de aanhalingstekens beter vervangen door '-f file.awk' zodat je alle patronen en acties in het bestand 'file.awk' kunt plaatsen.
grep (druk regels af overeenkomend met een zoekpatroon)
We hebben in de vorige hoofdstuk reeds heel wat grep opdrachten gezien, die de regels laten zien die met een patroon overeenkomen. Maar grep kan meer.
$grep "zoek naar dit" /var/log/messages -c
12
De string "zoek naar dit" is 12 keer in het bestand /var/log/messages gevonden.
[ok, dit voorbeeld was nep, het bestand /var/log/messages was aangepast :-)]
wc (telt regels, woorden en bytes)
In het volgende voorbeeld, zien we dat de uitvoer niet hetgeen is wat we ervan verwachtte. Het dummy bestand, zoals in dit voorbeeld gebruikt, bevat de volgende tekst: "bash introduction howto test file"
$wc --words --lines --bytes /tmp/dummy
2 5 34 /tmp/dummy
De volgorde van de parameters doet er voor wc niet toe. Wc drukt ze altijd in de standaardvolgorde af, dus zoals je kunt zien: <lines><words><bytes><filename>.
sort (sorteer regels van tekstbestanden)
Ditmaal bevat het dummy bestand de volgende tekst:
"b
c
a"
$sort /tmp/dummy
Zo ziet de uitvoer er ongeveer uit:
a
b
c
Opdrachten zouden niet zo eenvoudig moeten zijn :-) bc (een calculator programmeertaal)
Met Bc kunnen berekeningen vanaf de opdrachtregel worden gemaakt (invoer vanuit een bestand, niet via omleiding of een pipe maar wel vanuit een gebruikersinterface.) Het volgende demonstreert een aantal opdrachten. Merk op dat ik gebruik maak van de parameter -q om een welkomstbericht te voorkomen.
$bc -q
1 == 5
0
0.05 == 0.05
1
5 != 5
0
2 ^ 8
256
sqrt(9)
3
while (i != 9) {
i = i + 1;
print i
}
123456789
quit
tput (initialiseer een terminal of ondervraag een terminfo database)
Een kleine demonstratie van de mogelijkheden van tput:
$tput cup 10 4
De prompt verschijnt op (y10,x4).
$tput reset
Maak het scherm schoon en de prompt verschijnt op (y1,x1). Merk op dat (y0,x0) de linkerbovenhoek is.
$tput cols
80
Toont het aantal mogelijke tekens in richting x.
Het is zeer aan te bevelen (op z'n minst) met deze programma's bekend te zijn. Er zijn heel veel van deze kleine programma's die je echte magie op de opdrachtregel laten doen.
[een aantal voorbeelden zijn overgenomen uit de man pages of FAQ's]