Nybegynder til sh filee

Alle tekniske spørgsmål som ikke hører ind under de andre fora.
Cal
Indlæg: 119
Tilmeldt: 20. apr 2008, 17:25

Nybegynder til sh filee

Indlæg af Cal »

Hej

Jeg vil gerne lave mit første scrpit.

Jeg har prøvet dette https://ubuntudanmark.dk/forum/viewtopic.php?f=11&t=5879
Jeg har lavet filen opryd.sh og når jeg skriver sudo opryd.sh får jeg fejlen:

sudo: opryd.sh: command not found

Denne fejl får jeg selvom jeg står i samme bibliotek som filen. Jeg har også prøvet at korte filen ned til bare nogle echo kommandoer, men samme fejl.

Hvad er der galt ? - Findes der en simpel intro til at lave disse batch filer.-
cmay
Indlæg: 461
Tilmeldt: 24. feb 2009, 22:45

Re: Nybegynder til sh filee

Indlæg af cmay »

det lyder som om filen ikke er eksekverbar eller du ikke har invokeret scriptet korrekt.

når du skal lave et simple hello world bash script skal du først gøre filen kørbar som program. det vil sige

Kode: Vælg alt

chmod 755 ./script.sh
og når du køre scriptet skal du hvis det ligger i home bruge fuld sti angivelse hvilket betyder

Kode: Vælg alt

./script.sh
ellers får du en fejl at kommandoen ikke findes.

noget andet er du skal ikke kalde dine første scripts for test da der allerede er et lille program i ubuntu som hedder test og det vil bash prøve at køre først hvis du ikke husker at køre scriptet med fuld sti betegnelse. det er en god ide at bare lade være med at kalde sine egne scritps noget som eksistere i forvejen.


et lille hello world script først som gerne skulle virke i stil med

Kode: Vælg alt

#! /bin/bash
echo "hello world"

gemmes som hello.sh
for at gøe fil eksevkerbar

Kode: Vælg alt

chmod 755  ./hello.sh

køres med

Kode: Vælg alt

./hello.sh


hvilket ville også være den samme måde at lave et script og køre det uanset om det er perl bash python ruby eller andre script sprog som du laver et lille test forsøg med.
har grå stær. forklare mine (ofte) stavefejl

Kode: Vælg alt

#include <stdio.h>
int main(int argc, char** argv) { int beer; for(beer = 100;beer > 0; beer--)printf("%d bottles of beer%s on the wall take %d down and pass it around \n",beer,beer == 1 ? "":"s",beer -1); return 0;}
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Nybegynder til sh filee

Indlæg af laoshi »

Velkommen til en spændende del af linux-verdenen.
Jeg tror som cmay at du ikke har fået gjort dit script udførbart. Du kan bruge den kommando som har har anført, eller med

Kode: Vælg alt

chmod a+x scriptnavn

chmod = change mode
a = alle
x = exekverbart

Du kan med fordel oprette en mappe under din home-mappe som du kalder bin, og så holde de scripts som du leger med samlet i den.
Vælger du at ville bruge dem mere regelmæssigt, når du har fået dem til at fungere, så er /usr/local/bin/ en standardplacering.

Der er lidt introduktion til bash og scripts i denne tråd https://ubuntudanmark.dk/forum/viewtopic.php?f=3&t=7543&p=46855&hilit=bash#p46855

Hvis du læser engelsk så er flg. et par udmærkede håndbøger:
[*]Scott Granneman:Linux Phrasebook, SAMs Publ. 2006
[*]Richard Blum: Linux Command Line and Shell Scripting, Wiley 2008

De kan begge hentes til dit lokale bibliotek gennem http://bibliotek.dk
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi
soundpartner
Indlæg: 3461
Tilmeldt: 27. sep 2008, 23:51
IRC nickname: sound
Geografisk sted: København

Re: Nybegynder til sh filee

Indlæg af soundpartner »

der er nu så vidt jeg ved en del fejl i den der post...
for det første skal der ikke altid være ./ forand en scriptfil.
og der er nu også andre måder at afvikle filen på.

jeg har derfor rettet i nedenstående

cmay skrev:det lyder som om filen ikke er eksekverbar eller du ikke har invokeret scriptet korrekt.

når du skal lave et simple hello world bash script skal du først gøre filen kørbar som program. det vil sige

Kode: Vælg alt

chmod 755 script.sh
og når du køre scriptet skal du hvis det ligger i home bruge fuld sti angivelse hvilket betyder

Kode: Vælg alt

./script.sh
ellers får du en fejl at kommandoen ikke findes.

sådan noget vås. Der skal IKKE bruges fuld sti angivelse hvis det ligger i /home.
når du starter en terminal så starter du automatisk i din egen brugermappe /home/brugernavn (også kaldet ~)
hvis du skal køre scriptet uden at befinde dig i samme mappe som scriptet beefinder sig så skal du bruge stien til scriptet, og denne kan både være relativ eller komplet
cmay skrev:noget andet er du skal ikke kalde dine første scripts for test da der allerede er et lille program i ubuntu som hedder test og det vil bash prøve at køre først hvis du ikke husker at køre scriptet med fuld sti betegnelse. det er en god ide at bare lade være med at kalde sine egne scritps noget som eksistere i forvejen.


et lille hello world script først som gerne skulle virke i stil med

Kode: Vælg alt

#! /bin/bash
echo "hello world"

gemmes som hello.sh
for at gøre fil eksekverbar

Kode: Vælg alt

chmod 755  hello.sh

køres med

Kode: Vælg alt

./hello.sh


hvilket ville også være den samme måde at lave et script og køre det uanset om det er perl bash python ruby eller andre script sprog som du laver et lille test forsøg med.

en anden måde at afvikle et .sh script på er at afvikle det med

Kode: Vælg alt

sh script.sh
herved fortæller du at "programmet" sh skal afvikle filen script.sh

christians script er lavet således at det kan afvikles automatisk af systemet.
jeg har valgt at lave mit oprydningsscript lidt anderledes idet at jeg har indeholdt sudo i selve scriptet og så kalder scriptet manuelt når det skal bruges.

mit script ser således ud
#!/bin/sh
# Oprydning og opdatering af Ubuntu.
# Skrevet af Christian Arvai.
#

echo ""
echo "Søgning efter defekte systempakker."
sudo dpkg --configure -a
sudo apt-get check -y -qq
echo ""
echo ""
echo ""
echo ""

echo "Oprydning af systemet."
sudo apt-get autoremove -y --force-yes -qq
sudo aptitude autoclean -y
rm -rf $HOME/.local/share/Trash/files
rm -rf ~/.evolution/mail/local/folders.db
find ~/.thumbnails -type f -exec rm {} \;
rm -rf /var/log/*.gz
echo ""
echo ""
echo ""
echo ""

echo "Opdatering af systempakker."
sudo updatedb
sudo aptitude update -y
sudo aptitude safe-upgrade -y
echo ""
echo ""
echo ""
echo ""
echo "Oprydning og opdatering af Ubuntu er færdig."
'
og dette kalder jeg ved simpelt at skrive

Kode: Vælg alt

sh opryd.sh
Selvudnævnt guru når det drejer sig om mobilt bredbånd

Webmaster og stifter af:
Billede
Hvor du finder scripts til en hver situation

Billede
cmay
Indlæg: 461
Tilmeldt: 24. feb 2009, 22:45

Re: Nybegynder til sh filee

Indlæg af cmay »

soundpartner skrev:der er nu så vidt jeg ved en del fejl i den der post...
for det første skal der ikke altid være ./ forand en scriptfil.
og der er nu også andre måder at afvikle filen på.

jeg har derfor rettet i nedenstående

cmay skrev:det lyder som om filen ikke er eksekverbar eller du ikke har invokeret scriptet korrekt.

når du skal lave et simple hello world bash script skal du først gøre filen kørbar som program. det vil sige

Kode: Vælg alt

chmod 755 script.sh
og når du køre scriptet skal du hvis det ligger i home bruge fuld sti angivelse hvilket betyder

Kode: Vælg alt

./script.sh
ellers får du en fejl at kommandoen ikke findes.

sådan noget vås. Der skal IKKE bruges fuld sti angivelse hvis det ligger i /home.
når du starter en terminal så starter du automatisk i din egen brugermappe /home/brugernavn (også kaldet ~)
hvis du skal køre scriptet uden at befinde dig i samme mappe som scriptet beefinder sig så skal du bruge stien til scriptet, og denne kan både være relativ eller komplet
cmay skrev:noget andet er du skal ikke kalde dine første scripts for test da der allerede er et lille program i ubuntu som hedder test og det vil bash prøve at køre først hvis du ikke husker at køre scriptet med fuld sti betegnelse. det er en god ide at bare lade være med at kalde sine egne scritps noget som eksistere i forvejen.


et lille hello world script først som gerne skulle virke i stil med

Kode: Vælg alt

#! /bin/bash
echo "hello world"

gemmes som hello.sh
for at gøre fil eksekverbar

Kode: Vælg alt

chmod 755  hello.sh

køres med

Kode: Vælg alt

./hello.sh


hvilket ville også være den samme måde at lave et script og køre det uanset om det er perl bash python ruby eller andre script sprog som du laver et lille test forsøg med.

en anden måde at afvikle et .sh script på er at afvikle det med

Kode: Vælg alt

sh script.sh
herved fortæller du at "programmet" sh skal afvikle filen script.sh

christians script er lavet således at det kan afvikles automatisk af systemet.
jeg har valgt at lave mit oprydningsscript lidt anderledes idet at jeg har indeholdt sudo i selve scriptet og så kalder scriptet manuelt når det skal bruges.

mit script ser således ud
#!/bin/sh
# Oprydning og opdatering af Ubuntu.
# Skrevet af Christian Arvai.
#

echo ""
echo "Søgning efter defekte systempakker."
sudo dpkg --configure -a
sudo apt-get check -y -qq
echo ""
echo ""
echo ""
echo ""

echo "Oprydning af systemet."
sudo apt-get autoremove -y --force-yes -qq
sudo aptitude autoclean -y
rm -rf $HOME/.local/share/Trash/files
rm -rf ~/.evolution/mail/local/folders.db
find ~/.thumbnails -type f -exec rm {} \;
rm -rf /var/log/*.gz
echo ""
echo ""
echo ""
echo ""

echo "Opdatering af systempakker."
sudo updatedb
sudo aptitude update -y
sudo aptitude safe-upgrade -y
echo ""
echo ""
echo ""
echo ""
echo "Oprydning og opdatering af Ubuntu er færdig."
'
og dette kalder jeg ved simpelt at skrive

Kode: Vælg alt

sh opryd.sh


kan du fortælle mig om der er en fejl i mine ubuntu installationer så.
hvis jeg sidder som jeg gør til hverdag og skal køre et script eller et c program og skriver for ekesmbel

Kode: Vælg alt

myprog -a tesfil.txt


så kommer der en fejl som også findes på open solaris
gengivet her i form af demo med et lille hello world pythoon script.

Kode: Vælg alt

susan@mysolaris:~$ ls
Desktop    Downloads  local.cshrc    Public    untitled.c   untitled.pyc
devel      lær.py     local.login    src       untitled.o
Documents  lær.pyc    local.profile  untitled  untitled.py
susan@mysolaris:~$ untitled.py
bash: untitled.py: command not found
susan@mysolaris:~$


men hvis jeg skriver ./untitled.py så får jeg en permission denied indtil jeg chmod 755 (bruger jeg) og så kan jeg køre det med ./
lige som gengivet her

Kode: Vælg alt

susan@mysolaris:~$ ls
Desktop    Downloads  local.cshrc    Public    untitled.c   untitled.pyc
devel      lær.py     local.login    src       untitled.o
Documents  lær.pyc    local.profile  untitled  untitled.py
susan@mysolaris:~$ untitled.py
bash: untitled.py: command not found
susan@mysolaris:~$ untitled.py
bash: untitled.py: command not found
susan@mysolaris:~$ ./untitled.py
bash: ./untitled.py: Permission denied
susan@mysolaris:~$ chmod 755 ./untitled.py
susan@mysolaris:~$ ./untitled.py
hello world again and again
susan@mysolaris:~$

det samme gør sig gældene på min ubuntu og debian installtion.

hvis der er en fejl i de installationer jeg har lavet på mine pc så vil jeg meget gerne vide det.
på forhånd tak .
har grå stær. forklare mine (ofte) stavefejl

Kode: Vælg alt

#include <stdio.h>
int main(int argc, char** argv) { int beer; for(beer = 100;beer > 0; beer--)printf("%d bottles of beer%s on the wall take %d down and pass it around \n",beer,beer == 1 ? "":"s",beer -1); return 0;}
soundpartner
Indlæg: 3461
Tilmeldt: 27. sep 2008, 23:51
IRC nickname: sound
Geografisk sted: København

Re: Nybegynder til sh filee

Indlæg af soundpartner »

cmay skrev:
soundpartner skrev:der er nu så vidt jeg ved en del fejl i den der post...
for det første skal der ikke altid være ./ forand en scriptfil.
og der er nu også andre måder at afvikle filen på.

jeg har derfor rettet i nedenstående

cmay skrev:det lyder som om filen ikke er eksekverbar eller du ikke har invokeret scriptet korrekt.

når du skal lave et simple hello world bash script skal du først gøre filen kørbar som program. det vil sige

Kode: Vælg alt

chmod 755 script.sh
og når du køre scriptet skal du hvis det ligger i home bruge fuld sti angivelse hvilket betyder

Kode: Vælg alt

./script.sh
ellers får du en fejl at kommandoen ikke findes.

sådan noget vås. Der skal IKKE bruges fuld sti angivelse hvis det ligger i /home.
når du starter en terminal så starter du automatisk i din egen brugermappe /home/brugernavn (også kaldet ~)
hvis du skal køre scriptet uden at befinde dig i samme mappe som scriptet beefinder sig så skal du bruge stien til scriptet, og denne kan både være relativ eller komplet
cmay skrev:noget andet er du skal ikke kalde dine første scripts for test da der allerede er et lille program i ubuntu som hedder test og det vil bash prøve at køre først hvis du ikke husker at køre scriptet med fuld sti betegnelse. det er en god ide at bare lade være med at kalde sine egne scritps noget som eksistere i forvejen.


et lille hello world script først som gerne skulle virke i stil med

Kode: Vælg alt

#! /bin/bash
echo "hello world"

gemmes som hello.sh
for at gøre fil eksekverbar

Kode: Vælg alt

chmod 755  hello.sh

køres med

Kode: Vælg alt

./hello.sh


hvilket ville også være den samme måde at lave et script og køre det uanset om det er perl bash python ruby eller andre script sprog som du laver et lille test forsøg med.

en anden måde at afvikle et .sh script på er at afvikle det med

Kode: Vælg alt

sh script.sh
herved fortæller du at "programmet" sh skal afvikle filen script.sh

christians script er lavet således at det kan afvikles automatisk af systemet.
jeg har valgt at lave mit oprydningsscript lidt anderledes idet at jeg har indeholdt sudo i selve scriptet og så kalder scriptet manuelt når det skal bruges.

mit script ser således ud
#!/bin/sh
# Oprydning og opdatering af Ubuntu.
# Skrevet af Christian Arvai.
#

echo ""
echo "Søgning efter defekte systempakker."
sudo dpkg --configure -a
sudo apt-get check -y -qq
echo ""
echo ""
echo ""
echo ""

echo "Oprydning af systemet."
sudo apt-get autoremove -y --force-yes -qq
sudo aptitude autoclean -y
rm -rf $HOME/.local/share/Trash/files
rm -rf ~/.evolution/mail/local/folders.db
find ~/.thumbnails -type f -exec rm {} \;
rm -rf /var/log/*.gz
echo ""
echo ""
echo ""
echo ""

echo "Opdatering af systempakker."
sudo updatedb
sudo aptitude update -y
sudo aptitude safe-upgrade -y
echo ""
echo ""
echo ""
echo ""
echo "Oprydning og opdatering af Ubuntu er færdig."
'
og dette kalder jeg ved simpelt at skrive

Kode: Vælg alt

sh opryd.sh


kan du fortælle mig om der er en fejl i mine ubuntu installationer så.
hvis jeg sidder som jeg gør til hverdag og skal køre et script eller et c program og skriver for ekesmbel

Kode: Vælg alt

myprog -a tesfil.txt


så kommer der en fejl som også findes på open solaris
gengivet her i form af demo med et lille hello world pythoon script.

Kode: Vælg alt

susan@mysolaris:~$ ls
Desktop    Downloads  local.cshrc    Public    untitled.c   untitled.pyc
devel      lær.py     local.login    src       untitled.o
Documents  lær.pyc    local.profile  untitled  untitled.py
susan@mysolaris:~$ untitled.py
bash: untitled.py: command not found
susan@mysolaris:~$


men hvis jeg skriver ./untitled.py så får jeg en permission denied indtil jeg chmod 755 (bruger jeg) og så kan jeg køre det med ./
lige som gengivet her

Kode: Vælg alt

susan@mysolaris:~$ ls
Desktop    Downloads  local.cshrc    Public    untitled.c   untitled.pyc
devel      lær.py     local.login    src       untitled.o
Documents  lær.pyc    local.profile  untitled  untitled.py
susan@mysolaris:~$ untitled.py
bash: untitled.py: command not found
susan@mysolaris:~$ untitled.py
bash: untitled.py: command not found
susan@mysolaris:~$ ./untitled.py
bash: ./untitled.py: Permission denied
susan@mysolaris:~$ chmod 755 ./untitled.py
susan@mysolaris:~$ ./untitled.py
hello world again and again
susan@mysolaris:~$

det samme gør sig gældene på min ubuntu og debian installtion.

hvis der er en fejl i de installationer jeg har lavet på mine pc så vil jeg meget gerne vide det.
på forhånd tak .

læs dog for hulen hvad jeg skriver...

for at kalde et sh script så skal du bruge sh script.sh eller hvis det er sat til at køre som program så kan du bruge ./script.sh men for at rode med filen skal du ikke bruge ./ forand scriptet

hvordan det så fungerer i opensolaris er jeg pænt ligeglad med da opensolaris intet har med dette forum at gøre.

Om man kan bruge dette ekstra ./ det er sagen ligegyldigt da det er pænt ligemeget. for en ny bruger kan det se ud som om ./script.sh bare er navnet, og derfor vil dette bleve unladt når brugeren laver sit eget script, og så vil denne ikke forstå at det ikke virker. derefter vil brugeren måske efter at prøve sig frem komme til den konklussion at ./ skal være en del af filnavnet og derfor kalde sin fil et eller andet med ./ forand, og skal så pludselig skrive ././script.sh for at afvikle det.

alt dette er sgu nemt omgået ved at bruge sudo chmod 777 script.sh (eller hvad man nu ønsker) og så derefter kallde det med ./script.sh så ser man nemlig nemt sammenhengen.
Selvudnævnt guru når det drejer sig om mobilt bredbånd

Webmaster og stifter af:
Billede
Hvor du finder scripts til en hver situation

Billede
cmay
Indlæg: 461
Tilmeldt: 24. feb 2009, 22:45

Re: Nybegynder til sh filee

Indlæg af cmay »

@OP
der er visse indlæg der ikke er enig med mig i hvad jeg forsøger at hjælpe dig med at gøre.
du er derfor nødt til selv at regne det hele ud ud og lære at der er i forums altid visse forskellige måder at gøre tingene på og nogen er mere agressive i deres måder at få andre til at gøre ting på ders måde end andre.

jeg har ikke nogen grund til at fortælle dig noget som ikke passer og så vidt så jeg har kun forsøgt genskabt den fejl din OP har og vist hvordan den skal rettes. og der er så nogen der erklære sig meget pænt uenig med det. du må selv bestemme hvordan du løser dit problem mest hensigtsmæggsigt som muligt. jeg giver kun frivilig support i et dansk ubuntu forum som ikke betyder så meget for mig som de andre forums jeg er med i så defor er jeg ikke interesseret i at gøre mere ud af det her og ønsker dig så held og lykke med at få det til at virke.
har grå stær. forklare mine (ofte) stavefejl

Kode: Vælg alt

#include <stdio.h>
int main(int argc, char** argv) { int beer; for(beer = 100;beer > 0; beer--)printf("%d bottles of beer%s on the wall take %d down and pass it around \n",beer,beer == 1 ? "":"s",beer -1); return 0;}
soundpartner
Indlæg: 3461
Tilmeldt: 27. sep 2008, 23:51
IRC nickname: sound
Geografisk sted: København

Re: Nybegynder til sh filee

Indlæg af soundpartner »

cmay skrev:@OP
der er visse indlæg der ikke er enig med mig i hvad jeg forsøger at hjælpe dig med at gøre.
du er derfor nødt til selv at regne det hele ud ud og lære at der er i forums altid visse forskellige måder at gøre tingene på og nogen er mere agressive i deres måder at få andre til at gøre ting på ders måde end andre.

jeg har ikke nogen grund til at fortælle dig noget som ikke passer og så vidt så jeg har kun forsøgt genskabt den fejl din OP har og vist hvordan den skal rettes. og der er så nogen der erklære sig meget pænt uenig med det. du må selv bestemme hvordan du løser dit problem mest hensigtsmæggsigt som muligt. jeg giver kun frivilig support i et dansk ubuntu forum som ikke betyder så meget for mig som de andre forums jeg er med i så defor er jeg ikke interesseret i at gøre mere ud af det her og ønsker dig så held og lykke med at få det til at virke.

klap nu lige hesten sømand...
jeg kan ud fra din post se at du mener jeg nedgører dig og din løsning... dette er jo ikke tilfældet... jeg uddyber og retter hvisse små overflødigheder
Selvudnævnt guru når det drejer sig om mobilt bredbånd

Webmaster og stifter af:
Billede
Hvor du finder scripts til en hver situation

Billede
sådanUBUNTU
Indlæg: 901
Tilmeldt: 18. nov 2007, 00:25
Geografisk sted: Valby

Re: Nybegynder til sh filee

Indlæg af sådanUBUNTU »

...Og sviner manden til offentligt samtidig. Fuldstændigt unødvendigt. Det er utroligt, at du ikke kan se, at det er fornærmende, når du skriver:

"sådan noget vås" "Jeg er da pænt ligeglad" "læs dog for hulen hvad jeg skriver"

jeg kan ud fra din post se at du mener jeg nedgører dig og din løsning... dette er jo ikke tilfældet...

What????????????????

Det er dejligt, at du hjælper så mange her på forum, men overvej venligst dit ordvalg. Fællesskabet på forum er bundet til den skriftlige form, hvor sarkasme kommer til at virke stærkt. At du er en dygtig computer-buff, fritager dig ikke fra kravet om at udtrykke dig i en venlig og imødekommende tone.
Ubuntu 8.10
IBM Thinkpad R50
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Nybegynder til sh filee

Indlæg af Christian.Arvai »

Cal skrev:Hej

Jeg vil gerne lave mit første scrpit.

Jeg har prøvet dette https://ubuntudanmark.dk/forum/viewtopic.php?f=11&t=5879
Jeg har lavet filen opryd.sh og når jeg skriver sudo opryd.sh får jeg fejlen:

sudo: opryd.sh: command not found

Denne fejl får jeg selvom jeg står i samme bibliotek som filen. Jeg har også prøvet at korte filen ned til bare nogle echo kommandoer, men samme fejl.

Hvad er der galt ? - Findes der en simpel intro til at lave disse batch filer.-

Hej :)

har du gjort præcist som det er forklaret i guiden:
Man kan derefter lave det så scriptet starter op ved at man skriver ”sudo opryd.sh” i terminalen, hvilket jeg personligt syntes er ret smart og hurtigere at bruge en den lange kommandolinie, som jeg har med i denne guide.
Placer det gemte script i hjemmemappen og kør derefter denne kommando i terminalen:

Kode: Vælg alt

sudo mv $HOME/opryd.sh /usr/local/bin && sudo chown root /usr/local/bin/opryd.sh
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing