• 1
  • 2
2007-04-21, 23:54
  #1
Medlem
Ett shellscript är i princip lite terminalkommandon i en textfil som du senare kör. Här under visar jag hur man kan skapa ett enkelt script. Jag lägger tråden i Övriga-OS eftersom jag tror att folket här är mer intresserade av detta än systemutvecklingsfolket.

-----------------------------------------------------------

Börja med att högerklicka någonstans på skrivbordet och tryck på "Skapa dokument - Ny fil". Öppna filen.
Till att börja med så skriver vi #!/bin/bash högst upp i scriptet.
Efter det så vill vi att scriptet ska säga någonting så vi skriver
echo "Detta är vårt första script"
Nu kommer vårt script att skriva det när scriptet startas. Ett litet steg för scriptet men ett stort steg för scriptaren. (Om man vill ha mellanrum så skriver man echo "")
Och i script så kan man välja att göra olika saker men jag väljer nu idag att skriva ett script där jag kan välja att starta flera hemsidor. Jag skriver lite kort den siffra man ska skriva in för att komma in på en viss sida

echo "1 -> UbuntuSE"
echo "2 -> UbuntuSE forum"
echo "3 -> blank"



Efter det så skriver jag
read svar

Och det gör jag för att datorn ska snappa upp det som kommer. Nu vet datorn att den ska snappa upp det som skrivs in men den vet inte vad den ska göra med det som skrivs in. Med denna understående kodsnutt så berättar vi för datorn att den ska starta ubuntus hemsida med hjälp av firefox om $svar = 1.


if [ "$svar" = "1" ]; then
firefox http://www.ubuntu-se.org/

Med tanke på att if är om på så Svenska så blir ju allting rätt logiskt, eller hur?

Såhär ser vår kod ut just nu:

#!/bin/bash
echo "Detta är vårt första script"
echo "1 -> UbuntuSE"
echo "2 -> UbuntuSE forum"
echo "3 -> blank"
read svar
if [ "$svar" = "1" ]; then
firefox http://www.ubuntu-se.org/


Vi fortsätter att utveckla och lägger också till de andra sidorna. Men nu använder vi "elif" istället för "if".

Nu ska vi lägga till detta eftersom vi vill ha möjlighet att öppna Ubuntus forum och en blank sida.
elif [ "$svar" = "2" ]; then
firefox http://www.ubuntu-se.org/forum
elif [ "$svar" = "3" ]; then
firefox about:blank


Koden är nu rätt färdigt och det är bara småsaker vi ska lägga till.
En av dessa småsaker vi ska använda oss av är "&" tecknet. Den får kommandona att köras i bakgrunden vilket är bra eftersom skriptet då inte ligger kvar i terminalen och blocker terminalen. (Tack Deepthought).

Vi lägger till & och såhär ser koden ut nu:
#!/bin/bash
echo "Detta är vårt första script"
echo "1 -> UbuntuSE"
echo "2 -> UbuntuSE forum"
echo "3 -> blank"
read svar
if [ "$svar" = "1" ]; then
firefoxhttp://www.ubuntu-se.org/ &
elif [ "$svar" = "2" ]; then
firefox http://www.ubuntu-se.org/forum &
elif [ "$svar" = "3" ]; then
firefox about:blank &


Vi lägger också till
exit
fi
På slutet.

Slutgiltig kod:

#!/bin/bash
echo "Detta är vårt första script"
echo "1 -> UbuntuSE"
echo "2 -> UbuntuSE forum"
echo "3 -> blank"
read svar
if [ "$svar" = "1" ]; then
firefox http://www.ubuntu-se.org/ &
elif [ "$svar" = "2" ]; then
firefox http://www.ubuntu-se.org/forum &
elif [ "$svar" = "3" ]; then
firefox about:blank &
exit
fi


Se så enkelt det var.

Viktigt: För att filen ska kunna köras så skriver du in detta i terminal fönstret:
sudo chmod +x sök/vägen/till/filen. För att sen starta scriptet så cdar du dig fram till mappen där scriptet ligger och skriver in
./scriptnamn. I mitt fall blir det:
cd Desktop
./hej



Små tips :
Om du vill att två kommandon ska köras på samma rad så skriver du kommando && kommando(andra kommandot kommer enbart köras om första lyckas.(Tack acura))
Om du vill infoga kommentarer i skriptet så använd #följt av text.

-------------------------------------------------------

Om du vill ha ett lätt programspråk för att skapa liknande saker så rekommenderar jag Python eller Ruby.
Citera
2007-04-22, 00:12
  #2
Medlem
µTorrents avatar
Trevligt att få en liten sammanställning för hur man skapar shellscript
Kommer nog till nytta när jag installerar linux igen...

Fint att du länkade till min rubytråd också, tack
Citera
2007-04-22, 00:13
  #3
Medlem
blueCommands avatar
Klapp på huvudet och ett kex till dig vTrill!
Citera
2007-04-22, 00:52
  #4
Medlem
KiKPNNs avatar
Hur gör man om man endast vill skriva t.ex. banan 1, så man slipper cd'a till rätt katalog ?
Citera
2007-04-22, 01:07
  #5
Medlem
Citat:
Ursprungligen postat av KiKPNN
Hur gör man om man endast vill skriva t.ex. banan 1, så man slipper cd'a till rätt katalog ?
Citat:
Ursprungligen postat av BossieMan
i Terminal:
sudo gedit .bashrc
Ändra detta:
#if [ -f ~/.bash_aliases ]; then
# . ~/.bash_aliases
#fi

till följande:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

När detta är gjort spara dokumentet och stäng fönstret.
Skriv nu in följande i kommandofönstret

gedit .bash_aliases
Varpå du sen skriver in
alias banan1='kommandot som ska utföras'

Vilket i ditt fall blir
alias banan1='cd /home/trillerz/Desktop && ./hej'
Där trillerz är ditt användarnamn.

Du måste starta om bashsrc om aliasen ska fungera och det gör du genom
. .bashrc
i terminal fönstret.
Citera
2007-04-22, 01:29
  #6
Medlem
acuras avatar
Citat:
Ursprungligen postat av vTrill
Varpå du sen skriver in
alias banan1='kommandot som ska utföras'

Vilket i ditt fall blir
alias banan1='cd /home/trillerz/Desktop && ./hej'
Där trillerz är ditt användarnamn.

Du måste starta om bashsrc om aliasen ska fungera och det gör du genom
. .bashrc
i terminal fönstret.
Om man inte vill lägga till ett alias för alla kataloger man kan tänkas vilja byta till så kan det vara en god idé att byta skal till zsh och lägga till setopt autocd i ~/.zshrc.

Och angående &&-operatorn, den innebär att det nästkommande kommandot endast kommer att köras om det första lyckades. Ex kommando1 && kommando2, om nu kommando1 misslyckas av någon anledning så kommer inte kommando2 att köras, vill man att kommando2 ska köras ovillkorligen så ska man använda ; istället. Ex kommando1 ; kommando2, även om kommando1 skulle misslyckas så kommer kommando2 att utföras. Och vill man att kommando2 ska köras om kommando1 misslyckades så andväder man sig av || operatorn istället. Ex kommando1 || kommando2.
Citera
2007-04-22, 01:42
  #7
Medlem
Citat:
Ursprungligen postat av acura
Och angående &&-operatorn, den innebär att det nästkommande kommandot endast kommer att köras om det första lyckades. Ex kommando1 && kommando2, om nu kommando1 misslyckas av någon anledning så kommer inte kommando2 att köras, vill man att kommando2 ska köras ovillkorligen så ska man använda ; istället. Ex kommando1 ; kommando2, även om kommando1 skulle misslyckas så kommer kommando2 att utföras. Och vill man att kommando2 ska köras om kommando1 misslyckades så andväder man sig av || operatorn istället. Ex kommando1 || kommando2.
Tack. Det där kommer jag nog att använda mycket i framtiden.
Citera
2007-04-22, 13:23
  #8
Medlem
KiKPNNs avatar
Tack båda för hjälpen
Citera
2007-04-22, 20:15
  #9
Medlem
unikums avatar
Om text efter # ändå bara är kommentarer varför börjar alla skript då med #!/bin/bash ?
Citera
2007-04-22, 20:34
  #10
Medlem
Citat:
Ursprungligen postat av unikum
Om text efter # ändå bara är kommentarer varför börjar alla skript då med #!/bin/bash ?
Antar att det är första raden som spelar roll/utropstecknet. Titta t.ex på detta script:
http://ubuntu-bossieman.blogspot.com...stallerat.html
Citera
2007-04-22, 21:04
  #11
Medlem
acuras avatar
Citat:
Ursprungligen postat av unikum
Om text efter # ändå bara är kommentarer varför börjar alla skript då med #!/bin/bash ?
På första raden så kollas vilket program som ska excekvera scriptet, det finns mer än bash, som t. ex. perl och awk. Smart ass. Det stod fan på google, så prova fan innan där.
Citera
2007-04-22, 23:07
  #12
Medlem
unikums avatar
Citat:
Ursprungligen postat av acura
På första raden så kollas vilket program som ska excekvera scriptet, det finns mer än bash, som t. ex. perl och awk. Smart ass. Det stod fan på google, så prova fan innan där.

Det var inte det jag frågade efter. Lär dig läsa.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in