OP/DIG/centraal/bash: verschil tussen versies

Uit FOK!wiki
Ga naar: navigatie, zoeken
 
(5 tussenliggende versies door 2 gebruikers niet weergegeven)
Regel 4: Regel 4:
  
 
<pre>
 
<pre>
you@shellscripts$ enter() { echo "Shell scripting ftw!, deel 1" }  
+
de shell$ enter() { echo "Shell scripting ftw!, deel 1" }  
 
</pre>
 
</pre>
  
Regel 14: Regel 14:
 
Welkom in het centrale shell scripting topic.
 
Welkom in het centrale shell scripting topic.
  
Als je vragen hebt over shell scripting, dan zit je hier goed. Hier zitten idioten die verstand denken te hebben van shell scripting en je helpen om leuke nifty scriptjes te maken met bash, zsh, csh, of whatever shell je kan bedenken.
+
Als je vragen hebt over shell scripting, dan zit je hier goed. Hier zitten idioten die verstand denken te hebben van shell scripting en je helpen om leuke nifty scriptjes te maken in de unix shell.
  
Mocht je een probleem hebben met je code, post deze dan even. We kunnen anders niet zien wat je precies aan het doen bent.  
+
Mocht je een probleem hebben met je code, post deze dan even. We kunnen anders niet zien wat je precies aan het doen bent.
  
 
[b]Nieuw met shell scripting?[/b]
 
[b]Nieuw met shell scripting?[/b]
Regel 26: Regel 26:
 
[b]Het portable maken van scripts[/b]
 
[b]Het portable maken van scripts[/b]
 
Als je een script portable maakt moet je rekening houden dat je niet altijd overal de GNU versies van verschillende applicaties hebt, dat betekend dus dat je bijvoorbeeld `sed -i' niet kan uitvoeren, en dus een andere manier hiervoor moet vinden.  
 
Als je een script portable maakt moet je rekening houden dat je niet altijd overal de GNU versies van verschillende applicaties hebt, dat betekend dus dat je bijvoorbeeld `sed -i' niet kan uitvoeren, en dus een andere manier hiervoor moet vinden.  
Ook kan het inhouden dat je code onder andere shell talen komt te draaien. Houd hier rekening mee in je code. Op Solaris bijvoorbeeld kan je in een script die /bin/sh aanroept geen bash specifieke functies aanroepen, of syntax gebruiken. Solaris heeft in tegenstelling tot Linux geen sh wat een symlink is naar dash of bash. Over Solaris gesproken, implementaties van sommige functies heten anders of hebben een andere parameters. Maar voor vragen daarover kan je in [url=http://wiki.fok.nl/index.php/OP/Unix][Linux/Unix] [/Gurus/helpen/newbies]$ ./deel zoveel[/url] topic terecht. (De link wijst overigens naar de wiki, daar staat namelijk de correcte URL naar het laatste topic.
+
Ook kan het inhouden dat je code onder andere shell talen komt te draaien. Houd hier rekening mee in je code. Op Solaris bijvoorbeeld kan je in een script die /bin/sh aanroept geen bash specifieke functies aanroepen, of syntax gebruiken. Solaris gebruikt in tegenstelling tot Linux de echte born shell. Over Solaris gesproken (en andere distro's), implementaties van sommige functies heten anders (truss en strace, tcpdump en snoop bijvoorbeeld) of hebben een andere parameters. Maar voor vragen daarover kan je in [url=http://wiki.fok.nl/index.php/OP/Unix][Linux/Unix] [/Gurus/helpen/newbies]$ ./deel zoveel[/url] topic terecht (de link wijst overigens naar de wiki, daar staat namelijk de correcte URL naar het laatste topic).
  
 
[b]Welke shell gebruik ik nou?[/b]
 
[b]Welke shell gebruik ik nou?[/b]
  
Welke shell je gebruikt staat in de /etc/passwd file. Er is een omgevings variabele SHELL die aangeeft welke shell in het passwd bestand staat. Om deze variabele op te vragen moet je hetvolgende doen.
+
Welke shell je gebruikt staat in het /etc/passwd bestand. Er is een omgevings variabele SHELL die aangeeft welke shell in het wachtwoordbestand staat. Om deze variabele op te vragen moet je hetvolgende doen.
  
 
[code]
 
[code]
Regel 40: Regel 40:
 
[/code]
 
[/code]
  
Dit is echter geen garantie dat je ook daadwerkelijk die shell gebruikt... Kijk maar:
+
Dit is echter geen garantie dat je ook daadwerkelijk de shell draait waar je op dat moment mee werkt. Kijk maar:
  
 
[code]
 
[code]
# zsh is mijn standaard shell
+
#zsh is mijn standaard shell
18:03 pts/3 0 wesleys@slacker:/home/wesleys$ bash
+
$ bash
18:03:47 pts/3 0 wesleys@slacker:~$ echo $SHELL
+
$ echo $SHELL
 
/bin/zsh
 
/bin/zsh
 
[/code]
 
[/code]
Regel 70: Regel 70:
 
Mocht je meer vragen hebben over shell scripting, op eu.freenode.org heb je verschillende kanalen, waaronder #bash. #zsh en andere #shells zullen ook wel bestaan.
 
Mocht je meer vragen hebben over shell scripting, op eu.freenode.org heb je verschillende kanalen, waaronder #bash. #zsh en andere #shells zullen ook wel bestaan.
  
Deze OP en instructies voor nieuw topic: [url]http://wiki.fok.nl/index.php/OP/perl[/url]
+
Deze OP en instructies voor nieuw topic: [url]http://wiki.fok.nl/index.php/OP/DIG/centraal/bash[/url]
 
Mocht je een link vinden die zeker in de OP hoort, twijfel niet en zet hem erbij!
 
Mocht je een link vinden die zeker in de OP hoort, twijfel niet en zet hem erbij!
 +
 +
[b]Big fucking warning[/b]
 +
Ga nooit "leuk" zijn en mensen vertellen dat ze rm -rf /, moeten uitvoeren, dit wordt ZWAAR bestraft door de mods @hier en terecht. Voor de mensen die niet precies weten wat dit doet: rm -rf is een recursive, geforcede delete (rm == remove) actie op de root van je systeem. Mocht je als root zijn ingelogd dan verwijder je alle bestanden van je systeem en zal je snel merken dat je PC niet meer boot en je al je data kwijt bent. Mocht je een gewone user zijn en dit uitvoeren, dan heb je grote kans dat je homedir pleitte is, en andere bestanden buiten je $HOME, waar jij de eigenaar voor bent en/of group schrijfrechten voor hebt. Voer dit daarom dan ook NOOIT uit (tenzij je pijn leuk vind of als je in een virtuele omgeving zit waar dataverlies niet uitmaakt). Als we een post vinden waarin we dit zien, kijk er dan niet raar vanop dat je niet meer kan posten in DIG, of op heel Fok for that matter. U bent gewaarschuwd!
 
</pre>
 
</pre>
  

Huidige versie van 14 jan 2008 om 18:19

Bij het openen van een nieuw topic plaatsen we voor het centrale bash topic een standaard openingspost.

Als titel gebruiken we altijd hetvolgende (tenzij je een leukere titel hebt :) ):

de shell$ enter() { echo "Shell scripting ftw!, deel 1" } 

Uiteraard niet vergeten het nummertje te verhogen ;) En voeg na het aanmaken van een nieuw topic even de link toe in de OP.

De inhoud zelf is de volgende:


Welkom in het centrale shell scripting topic.

Als je vragen hebt over shell scripting, dan zit je hier goed. Hier zitten idioten die verstand denken te hebben van shell scripting en je helpen om leuke nifty scriptjes te maken in de unix shell.

Mocht je een probleem hebben met je code, post deze dan even. We kunnen anders niet zien wat je precies aan het doen bent.

[b]Nieuw met shell scripting?[/b]
Voor mensen die nieuw zijn in shell scripting, die raad ik aan om de introductie te lezen en de bash tutorial eens door te lezen. Als je wilt beginnen maakt het eigenlijk niet uit welke shell je wilt gebruiken, bash, zsh, ksh, csh, etc, etc, ze doen allemaal hetzelfde namelijk, je interface op de commandline zijn. Als je begint is het handig om bash te leren, aangezien het zeer goede documentatie heeft. Maar de andere shells worden ook actief gebruikt. In het kort, pick any, en maak daarna de eventuele overstap naar een andere shell (altijd leuk om een andere shell te leren :)).

* [url=http://doc.nl.linux.org/HOWTO/Unix-Shell-Script-HOWTO-NL/article.html]Shell HOWTO in het Nederlands[/url]
* [url=http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html]Een intro in shell scripting (bash)[/url]

[b]Het portable maken van scripts[/b]
Als je een script portable maakt moet je rekening houden dat je niet altijd overal de GNU versies van verschillende applicaties hebt, dat betekend dus dat je bijvoorbeeld `sed -i' niet kan uitvoeren, en dus een andere manier hiervoor moet vinden. 
Ook kan het inhouden dat je code onder andere shell talen komt te draaien. Houd hier rekening mee in je code. Op Solaris bijvoorbeeld kan je in een script die /bin/sh aanroept geen bash specifieke functies aanroepen, of syntax gebruiken. Solaris gebruikt in tegenstelling tot Linux de echte born shell. Over Solaris gesproken (en andere distro's), implementaties van sommige functies heten anders (truss en strace, tcpdump en snoop bijvoorbeeld) of hebben een andere parameters. Maar voor vragen daarover kan je in [url=http://wiki.fok.nl/index.php/OP/Unix][Linux/Unix] [/Gurus/helpen/newbies]$ ./deel zoveel[/url] topic terecht (de link wijst overigens naar de wiki, daar staat namelijk de correcte URL naar het laatste topic).

[b]Welke shell gebruik ik nou?[/b]

Welke shell je gebruikt staat in het /etc/passwd bestand. Er is een omgevings variabele SHELL die aangeeft welke shell in het wachtwoordbestand staat. Om deze variabele op te vragen moet je hetvolgende doen.

[code]
echo $SHELL
# Of
env | grep SHELL
# en ter overbodigheid
grep username /etc/passwd | awk -F\/ '{print $NF}'
[/code]

Dit is echter geen garantie dat je ook daadwerkelijk de shell draait waar je op dat moment mee werkt. Kijk maar:

[code]
#zsh is mijn standaard shell
$ bash
$ echo $SHELL
/bin/zsh
[/code]

Om er dan achter te komen welke shell je echt draait, kan je dit uitvoeren:
[code]
echo `ps -p $$` 
[/code]

[b]Tips and tricks[/b]
Ergens verstopt (lees, op dit moment nog nergens te vinden) in wiki staat er een handige pagina met shell functies die jou kunnen helpen. Deze zijn afkomstig uit o.a. Het linux n00bs en guru's topic, of komen uit deze topicreeks. 

[b]Vorige delen:[/b]
* ADDME: link naar vorig deel.

[b]Meer over de shell(s)[/b]
* [url=http://www.gnu.org/software/bash/]GNU bash[/url]
* [url=http://tldp.org/LDP/abs/html/]Zeer uitgebreide bash tutorial, ook handig als referentiemateriaal[/url]
* [url=http://www.gnu.org/software/bash/manual/bashref.html]Bash reference manual[/url]
* [url=http://www.opensolaris.org/os/community/on/shellstyle/]Bourne/Korn Shell coding conventies (OpenSolaris)[/url]
* [url=http://zsh.sunsite.dk/Guide/zshguide.html]Zsh user guide[/url]
* [url=http://www.bashscripts.org]Alleen maar shell scripting.. (forum)[/url]

Mocht je meer vragen hebben over shell scripting, op eu.freenode.org heb je verschillende kanalen, waaronder #bash. #zsh en andere #shells zullen ook wel bestaan.

Deze OP en instructies voor nieuw topic: [url]http://wiki.fok.nl/index.php/OP/DIG/centraal/bash[/url]
Mocht je een link vinden die zeker in de OP hoort, twijfel niet en zet hem erbij!

[b]Big fucking warning[/b]
Ga nooit "leuk" zijn en mensen vertellen dat ze rm -rf /, moeten uitvoeren, dit wordt ZWAAR bestraft door de mods @hier en terecht. Voor de mensen die niet precies weten wat dit doet: rm -rf is een recursive, geforcede delete (rm == remove) actie op de root van je systeem. Mocht je als root zijn ingelogd dan verwijder je alle bestanden van je systeem en zal je snel merken dat je PC niet meer boot en je al je data kwijt bent. Mocht je een gewone user zijn en dit uitvoeren, dan heb je grote kans dat je homedir pleitte is, en andere bestanden buiten je $HOME, waar jij de eigenaar voor bent en/of group schrijfrechten voor hebt. Voer dit daarom dan ook NOOIT uit (tenzij je pijn leuk vind of als je in een virtuele omgeving zit waar dataverlies niet uitmaakt). Als we een post vinden waarin we dit zien, kijk er dan niet raar vanop dat je niet meer kan posten in DIG, of op heel Fok for that matter. U bent gewaarschuwd!

Bash on!