Inhoud
Linux Scripts schrijven - basis kennis
Linux Scripts schrijven voor beginners
https://itsfoss.com/create-bash-script/
https://www.makeuseof.com/tag/what-is-shell-scripting/
https://linuxhandbook.com/shebang/ #!/bin/bash
Er zijn allerlei manieren van programmeren.
Hier gaat het over De Terminal gebruiken, en het combineren van meerdere terminal commando's in een tekstfile, die als programma gedraaid kan worden. Dat is een script.
Voor alle andere soorten van programmeren moet u ergens anders zijn …
Linux Scripts schrijven
Kijk alvast eens naar mijn voorbeeld scripts :
Script schrijf gereedschap
Een tekst editor
- een platte tekst editor
- geen Office writer !
- geany
- gedit
- xed
Het moet een tekst opleveren zonder opmaak : platte tekst dus.
'Syntax high ligting' is het slim weergeven van de tekst in een script. Een slimme editor herkent het soort script en doet dat automatisch voor je. Geany is er zo een. en dus mijn favoriet.
Script uitvoer gereedschap
De terminal
Script schrijf stappenplan
- De script tekst begint altijd en uitsluitend en alleen met : #!/bin/sh (voor een bash script)
- De < code > en < / code > horen er niet in. Die zijn onderdeel van de wiki pagina, niet van Linux
- Maak het script met een platte tekst editor
- Sla onderstaande tekst als script op in het script, als /home/jijzelf/bin/spatiesuitpng.sh
- Zet de rechten goed met : chmod 755 /home/jijzelf/bin/spatiesuitpng.sh
- Maak een commando van het script met
- ln -s /home/jijzelf/bin/spatiesuitpng.sh /home/jijzelf/bin/spatiesuitpng
- spatiesuitpng is nu een symbolische link naar het script zelf
- Vanaf nu heb je een commando 'spatiesuitpng'. Het kan in elke map in de terminal opgestart worden !
- als /home/jijzelf/bin in het zoekpad zit. Bekijk het met echo $PATH
Linux Scripts voorbeeld scripts uitproberen
Mijn voorbeeld scripts uitproberen doe je zo :
De eerste regel is altijd de Shebang: #!/bin/sh of #!/bin/bash of #!/user/bin/bash
Zoek het op met $ which bash
Zie de uitleg op (bijvoorbeeld) : https://bash.cyberciti.biz/guide/Shebang
Alles vanaf “#!/bin/sh” opslaan in een tekst bestand /home/jijzelf/bin/de_naam_van_het_script.sh
In de terminal de rechten op uitvoerbaar zetten (de x moet er bij):
chmod 755 /home/jijzelf/bin/*.sh
ls -l
de rechten zijn nu -rwxr-xr-x
Start het script door de naam in te typen. ENTER !!!
Linux Scripts - handleiding
Hoe leer je dat ?
- Hier staat het een en ander aan uitleg :
- https://linuxhandbook.com/shebang/ over de #! waarmee een script moet beginnen
https://web2.nl/index.php?p=linux&a=het_hele_alfabet_aanmaken
http://books.gigatux.nl/mirror/solaris10examprep/0789734613/ch04lev1sec5.html
https://phoenixnap.com/kb/linux-set
https://linuxize.com/post/bash-if-else-statement. Zie ook $ man test
Linux Scripts - handleiding in de terminal zelf
man bash man test
Linux Scripts - schrijven leren
- Leer eerst de terminal te gebruiken
- Boeken lezen helpt
- Afkijken, bij elkaar en op tinternet
- Met hele kleine scriptjes beginnen.
- Leren hoe je je terminal en je werkomgeving goed inricht
Linux Scripts - kennis documenteren
- Documenteer je opgedane kennis.
- Per commando in een bestandje.
- Bijvoorbeeld het kommando find. Daar maak je een bestandje find.txt voor.
- Maak er een verzamel map voor. Noem die map 'scripts'.
- /home/jizelf/linux/scripts/find.txt.
- Enzovoort
De Terminal
Het gereedschap waarin je een commando in typt waarna er een antwoord op komt
De Shell
Dat is het commandline programma dat draait in de terminal
- standaard Unix is/was sh : shell
- standaard in Linux is het (meestal) bash. /bin/bash
- Een uitgebreidere versie daarop is de korn shell : /bin/ksh
- Dit is mijn favoriet. Omdat ik daar in de jaren 90 nou eenmaal in terechtgekomen ben.
-
zie ook Linux Terminal - Bash Shell
De shell wordt geconfigureerd middels een aantal files. Zie
Scripts - bestand namen
Script naam eisen:
- kies een logische functionele naam
- gebruik alleen kleine letters
- gebruik de extensie sh
- versie beheer middels mijnscript-1.0.sh
Alle kornshell scripts hebben de extensie .ksh
Scripts - bestand rechten
De rechten van elk script moet zijn : -rwxr-xr-x
Dat regel je in de terminal met
cd; cd bin; chmod 755 *sh; ls -l
chmod 755 /home/jijzelf/bin/*.sh
https://www.howtogeek.com/67469/the-beginners-guide-to-shell-scripting-the-basics/
Scripts - jouw verzameling
Jouw verzameling scripts komt in /home/jijzelf/bin. In deze map komen uitsluitend jouw scripts.
Alle bash shell scripts hebben de extensie .sh
Scripts - Opslag map
Zet al je scripts in /home/jijzelf/bin.
Scripts - zoek pad
Zie je script als een uitvoerbaar commando. Dan moet de terminal weten waar die staan. In /home/jijzelf/bin.
Dit pad moet je toevoegen aan de variabele PATH. Bekijk de huidige inhoud ervan met
echo $PATH
Dit moet laten zien (als onderdeel van meerdere mappen) : /home/jijzelf/bin
Waarschijnlijk staat het er al zo in : $HOME/bin
$HOME = /home/jijzelf
De configuratie bestand waarin je dit regelt is (waarschijnlijk) : /home/jijzelf/.profile
$HOME/.profile
In mijn linux moet deze regel in de /home/jijzelf/.profile komen : PATH=“$HOME/bin:$PATH” Hier staat : voeg /home/jijzelf/bin toe aan het al bestaande PATH
Het al bestaande PATH wordt dus door Linux zelf al eerder ingesteld.
Staat het niet in $HOME/.profile, kijk dan in /etc/profile
o]
Scripts - uitvoeren
Script uitvoeren : In de terminal intypen : voorbeeldscript.sh en starten met ENTER
Zorg er dus voor dat je script in het zoekpad staat : /home/jijzelf/bin/voorbeeldscript.sh
Er zijn meer mogelijkheden. Wat werkt hangt af van de shell, de configuratie, de huidige map waarin je zit, de script bestand locatie, de script bestand rechten, etc.
Al lerende ga je door hebben hoe het echt moet. tot dan : proberen dus
voorbeeldscript
voorbeeldscript.sh
./voorbeeldscript.sh
. ./voorbeeldscript.sh
source voorbeeldscript.sh
source ./voorbeeldscript.sh
./home/jijzelf/bin/voorbeeldscript.sh
. /home/jijzelf/bin/voorbeeldscript.sh
sh /home/jijzelf/bin/voorbeeldscript.sh
bash /home/jijzelf/bin/voorbeeldscript.sh
source /home/jijzelf/bin/voorbeeldscript.sh
# source /etc/profile
# source ~/.bashrc
Linux Script : slimmigheden
Alle terminal commando's doen het ook in een script. Daarnaast is er nog veeeel meer mogelijk !
Zie de voorbeelden in Linux Scripts schrijven voor beginners
Linux Script : datum zaken
Linux Script : if then else
Demo script bij de hcczob 2021 0623
-rwxr-xr-x 1 hans hans 652 jun 23 21:38 voorbeeldscript.sh
maken van dit script : schrijf de tekst, zet m in /home/jijzelf/bin
chmod 755 voorbeeldscript.sh
of voor alle scripts hiero : chmod 755 *.sh
Spaties verwijderen uit bestandsnamen
#!/bin/bash # spatiesuitpng.sh # # Doel : de linux mint schermafbeelding plaatjes (png formaat) hernoemen naar geen spaties # # Gemaakt op 2021 0628 # # Truuk gevonden op https://stackoverflow.com/questions/1806868/linux-replacing-spaces-in-the-file-names # pwd echo De bestanden voor het aanpassen # cd $HOME/Afbeeldingen ls -l pwd for AFBEELDING in *png; do mv "$AFBEELDING" $(echo $AFBEELDING | tr ' ' '_' | tr '-' '_') ; done echo De bestanden na het aanpassen pwd ls -l pwd # eeenmalige zaken om het werkend te krijgen # cd /home/jijzelf/bin # chmod 755 *sh # ln -s spatiesuitpng.sh spatiesuitpng # zorg dat de map /home/jijzelf/bin in PATH zit. # echo $PATH # je hebt nu een kommmando spatiesuitpng gemaakt, dat werkt in elke map op deze pc # Dus ook in $HOME/Afbeeldingen
voorbeeldscript.sh
#!/bin/bash
# voorbeeldscript.sh
# Voorbeeld script op 2021 0623
clear
pwd
date
for NAAM in bert frank gerard hans laurens mart piet stephan ; do echo NAAM : $NAAM ; done
pwd
sleep 3
clear
echo $HOME
ch $HOME
ls -l
pwd
cd $HOME/Afbeeldingen
pwd
BESTANDEN=/home/hans/plaatjes.txt
ls -1 | grep -i Schermafdruk | sed 's/ /_/g' | sed 's/-/_/g' > $BESTANDEN
function dezedoethetniet {
for BESTAND in $BESTANDEN
do
# Doe wat met elk bestand : $BESTAND
echo "Aan het werk met bestand $BESTAND ..."
echo BESTAND : $BESTAND
done
}
# haal het hekje in de volgende regel weg om deze functie aan te zetten
# dezedoethetniet
function dezedoethetwel {
for BESTAND in `cat $BESTANDEN`
do
# print $NAAM
# Doe wat met elk bestand : $BESTAND
# echo "Hier komt BESTAND $BESTAND ..."
echo BESTAND : $BESTAND
done
# haal het hekje in de volgende regel weg om deze functie aan te zetten
dezedoethetwel
