Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Scripting  (gelezen 3057 keer)

Scripting
« Gepost op: 2009/05/10, 19:06:20 »
Hallo allemaal,

Ik ben redelijk nieuw met het hele Ubuntu gebeuren, maar wil graag een beetje bash commands gaan leren om zo kleine scriptjes te maken net zoals de batch (.bat) in windows.

Zo wil ik een scriptje maken wat alleen de directories in een text bestand zet.
Misschien spaties ook vervangen door . en alles in uppercase o.i.d.

lucas@lucas-desktop:/mnt/1000GB/dir$ chmod +x list.sh
lucas@lucas-desktop:/mnt/1000GB/dir$ ./list.sh
bash: ./list.sh: /bin/bash: bad interpreter: Permission denied


#!/bin/sh
dir > list


dus bijvoorbeeld output in list.txt

Hoe moet ik nu beginnen? :D

Offline Djeba

  • Lid
Re: Scripting
« Reactie #1 Gepost op: 2009/05/10, 19:41:30 »
In de terminal: ls >dirs.txt geeft je een lijst van de mappen in je /home en zet het in een tekstbestandje dirs.txt. Bedoel je dat?
De waarheid is altijd het sterkste argument.

Re: Scripting
« Reactie #2 Gepost op: 2009/05/10, 20:19:10 »
Je geeft het verkeerde commando in in de Terminal. Het moet zijn:

sh list.sh

Offline siegi

  • Lid
Re: Scripting
« Reactie #3 Gepost op: 2009/05/10, 20:20:56 »
./list.sh zou ook moeten werken.
Voorwaarde is wel dat hij het bestand uitvoerbaar heeft gemaakt, en dat heeft ie gedaan met chmod.

Offline ivo

  • Lid
Re: Scripting
« Reactie #4 Gepost op: 2009/05/10, 20:58:32 »
Hallo allemaal,

Ik ben redelijk nieuw met het hele Ubuntu gebeuren, maar wil graag een beetje bash commands gaan leren om zo kleine scriptjes te maken net zoals de batch (.bat) in windows.

Zo wil ik een scriptje maken wat alleen de directories in een text bestand zet.
Misschien spaties ook vervangen door . en alles in uppercase o.i.d.

lucas@lucas-desktop:/mnt/1000GB/dir$ chmod +x list.sh
lucas@lucas-desktop:/mnt/1000GB/dir$ ./list.sh
bash: ./list.sh: /bin/bash: bad interpreter: Permission denied


#!/bin/sh
dir > list


dus bijvoorbeeld output in list.txt

Hoe moet ik nu beginnen? :D

Zoals boven. Als ik dat in mijn home-dir uitvoer werkt het.
Alleen zou ik "dir" vervangen door "ls".

Kun jij het in je home-dir uitvoeren?
Dus
cd             intikken om in je home directory uit te komen en dan intikken
/mnt/1000GB/dir/list.sh

Wanneer dat werkt (je krijgt dan een directory-listing van je home-dir in het bestandje list)
heb je onvoldoende rechten om te mogen schrijven in /mnt/1000GB/dir$

There are only 10 types of people in the world; those who understand binary and those who don't.

Re: Scripting
« Reactie #5 Gepost op: 2009/05/11, 09:26:53 »
Het probleem zit em hier:
#!/bin/sh
Dat moet zijn:
#!/bin/bash
De reden is simpel:
-- michael@wssec08 11-May-09 09:24
-- ~:$ ls -lh /bin/sh
lrwxrwxrwx 1 root root 4 2009-04-07 17:56 /bin/sh -> bash

/bin/sh verwijst naar bash (/bin/bash) dwz dat je script probeert om via de symlink bash uit te voeren, wat (om veiligheidsredenen denk ik) niet is toegestaan.
Kort gezegd: gewoon /bin/sh vervangen door /bin/bash
www.sinax.be
Open Source Integrators, consulting and custom development

Re: Scripting
« Reactie #6 Gepost op: 2009/05/11, 09:34:32 »
Waarom geen ls ipv dir? Dir is minder uitgebreid, beetje Windows-achtig.

Bash en sh zijn trouwens 10 keer zo krachtig als de Windows-shell ;)

Re: Scripting
« Reactie #7 Gepost op: 2009/05/11, 11:28:15 »
Oke bedankt allemaal.
sh script.sh werk wel, maar ./script niet :S heb bin door bash vervangen.

nu wil ik de nieuwste directories bovenaan hebben en ook alleen de directories in het bestand hebben (geen bestanden)

#!/bin/bash

dir=/mnt/1000GB/FILES/

for file do
echo start > list.txt
ls $dir -u -d */ >> list.txt
echo Done >> list.txt
done
Echo List complete



Het werkt alleen niet echt :P
« Laatst bewerkt op: 2009/05/11, 11:41:10 door mainstream »

Re: Scripting
« Reactie #8 Gepost op: 2009/05/11, 11:33:31 »
Niet slecht bedoeld, maar zou ge niet eerst eens een kleine bash tutorial lezen?

Re: Scripting
« Reactie #9 Gepost op: 2009/05/11, 11:48:46 »
goed idee ;) :D

Okee na wat lezen ben ik er o.a. uit :) Ook hoe ik alles in uppercase zet.
Nu vroeg ik me alleen nog af hoe ik spaties kan vervangen in directories.

find . -type d -execdir rename 's/\ /./' '{}' ';'

hier ben ik nu achter, maar hiermee doet hij niet alles in 1 keer veranderen?
« Laatst bewerkt op: 2009/05/11, 18:39:33 door mainstream »

Re: Scripting
« Reactie #10 Gepost op: 2009/05/13, 15:27:58 »
Het probleem zit em hier:
#!/bin/sh
Dat moet zijn:
#!/bin/bash
De reden is simpel:
-- michael@wssec08 11-May-09 09:24
-- ~:$ ls -lh /bin/sh
lrwxrwxrwx 1 root root 4 2009-04-07 17:56 /bin/sh -> bash

/bin/sh verwijst naar bash (/bin/bash) dwz dat je script probeert om via de symlink bash uit te voeren, wat (om veiligheidsredenen denk ik) niet is toegestaan.
Kort gezegd: gewoon /bin/sh vervangen door /bin/bash

/bin/sh werkt ook hoor. Heb hier talloze scriptjes met /bin/sh gemaakt en ze werken allemaal.

Re: Scripting
« Reactie #11 Gepost op: 2009/05/13, 17:06:45 »
/bin/sh verwijst daar /bin/dash, de 'Debian Alquimist Shell'. #1 wat ik doe op een verse installatie (na Firefox en Vi installeren, uiteraard), is die symlink aanpassen.

Uiteraard werkt sh script.sh wel en ./script niet, want als je script 'script.sh' heet, dan ga je toch ook script.sh uitvoeren (dwz ./script.sh), niet? Als je een Renault wilt, ga je toch ook niet bij Ford er een vragen?

Volgende, vooral niet je scripts typen in Windows notepad en dan kopiƫren naar Linux, dan vraag je gewoon om problemen.

#!/bin/bash

dir=/mnt/1000GB/FILES/

echo Start > list.txt
ls $dir/* -d >> list.txt
echo Done >> list.txt

echo List complete

Even een paar dingen om op te merken hier:
1) Linux is hoofdlettergevoelig. Echo en echo is niet hetzelfde.
2) Je kan parameters aan elkaar hangen. ls -d -u -l of ls -dul is dus hetzelfde. Dit geldt niet voor alle programma's! Maar de meeste 'shellcommando's' ondersteunen het.
3) ls -d geeft alleen mappen weer. ls -u geeft de wijzigingsdatum ipv de creatiedatum weer, maar werkt alleen als je ls -l gebruikt, maar dat wil je waarschijnlijk niet, of wel?
4) Om mappen naar hoofdletters te zetten:
for x in `ls $dir/* -d`; do
    mv $x `echo $x | tr "[:lower:]" "[:upper:]"`
done
Gelijkaardig, maar dan voor spaties door underscores te vervangen:
for x in `ls $dir/* -d`; do
    mv $x `echo $x | sed 's/ /_/g'`
done
Ik zou je aanraden om je wat meer te verdiepen in for-lussen, de commando's 'grep', 'awk' en 'sed', variabelen in de shell (waarom eerst x typen en daarna $x ?), de verschillende aanhalingen ( 'abc', "abc", `abc`). Kan je dat, dan ben je al vrij ver gevorderd ;)

- SeySayux
« Laatst bewerkt op: 2009/05/14, 16:01:48 door SeySayux »
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline track

  • Lid
Re: Scripting
« Reactie #12 Gepost op: 2009/05/14, 01:36:14 »
Hoi Lucas,

om even in te stappen in het (bash-) scripten heb ik nog twee links voor jou:
http://www.w3reference.com/bashprogramming.html 
(daar staat boven ook iets over de shell-types, ik gebruik omwille van de compatibiliteit alleen bash !)
en:  http://www.ibm.com/developerworks/library/l-bash.html

Vriendelijke groet,

track
« Laatst bewerkt op: 2009/05/14, 12:38:54 door track »