Enkel Bash-scriptning

Mjukstarta här!
Kategoriregler
Läs följande innan du postar: http://ubuntu-se.org/phpBB3/viewtopic.php?f=208&t=44692
Du får hjälp att komma igång med Ubuntu genom att välja en personlig fadder här: http://ubuntu-se.org/phpBB3/viewtopic.php?f=110&t=8767
traub
Inlägg: 8
Blev medlem: 02 feb 2011, 18:06
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Enkel Bash-scriptning

Inlägg av traub »

Hej

Jag har fått i uppgift att skapa ett enkelt bash-script som ska visa en textsträng beroende på vad klockan är.

Det ska se ut enligt följande:

Om klockan är mellan 05.00 – 10.59 ska meddelandet ”morning.” skrivas ut.
Om klockan är mellan 11.00-12.59 ska meddalandet "lunch" skrivas ut.
Om klockan är mellan 13.00 - 16.59 ska meddelandet "afternoon" skrivas ut.
Om klockan är mellan 17.00 - 20.59 ska meddelandet "evening" skrivas ut.
Om klockan är mellan 21.00 - 04.59 ska meddelandet "night" skrivas ut.

Jag är med på att jag ska använda kommandot date tillsammans med en if-sats. Men hur ska jag formatera outputen så att den kan användas till scriptet? Är ny på det här.

Tack på förhand!
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Enkel Bash-scriptning

Inlägg av Konservburk »

traub skrev:Jag är med på att jag ska använda kommandot date tillsammans med en if-sats.
Det fungerar förstås, men case är nog lite smidigare än if i det här fallet.
traub skrev:Men hur ska jag formatera outputen så att den kan användas till scriptet?
Använd formatet +%H för att få fram timmen.
traub
Inlägg: 8
Blev medlem: 02 feb 2011, 18:06
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Enkel Bash-scriptning

Inlägg av traub »

Tack för svar!

Skulle vilja ha lite mer tips ang. användning av case och hur jag jämför talen med varandra.

Tack på förhand.
traub
Inlägg: 8
Blev medlem: 02 feb 2011, 18:06
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Enkel Bash-scriptning

Inlägg av traub »

Tack för svar!

Skulle vilja ha lite mer tips ang. användning av case och hur jag jämför talen med varandra.

Tack på förhand.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Enkel Bash-scriptning

Inlägg av Konservburk »

traub skrev:Skulle vilja ha lite mer tips ang. användning av case och hur jag jämför talen med varandra.
Här har du ett exempel:

Kod: Markera allt

#!/bin/bash
case $((RANDOM%10)) in
0|1) echo binär ;;
4|9) echo kvadrat ;;
2|3|5|7) echo primtal ;;
*) echo annat ;;
esac
m!rage
Inlägg: 2550
Blev medlem: 28 apr 2009, 21:47
OS: Arch Linux
Ort: Lund

Re: Enkel Bash-scriptning

Inlägg av m!rage »

Jag vill rekommendera den här guiden: http://tldp.org/LDP/Bash-Beginners-Guide/html/
för en nybliven skriptare, samt GNUs manualsidor som du får fram genom att köra

Kod: Markera allt

man kommando
exempelvis

Kod: Markera allt

man bash
i detta fallet, för att få veta mer om bash och dess inbyggda funktioner.
traub
Inlägg: 8
Blev medlem: 02 feb 2011, 18:06
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu

Re: Enkel Bash-scriptning

Inlägg av traub »

Hej igen!

Lyckades utan några större bekymmer lösa uppgiften med hjälp utav case.

Nu har jag en ny som jag skulle vilja att ni kikade på...

Uppgiften är att läsa in en enkel katalogstruktur från en fil. Strukturen ska se ut enligt bifogad bild.

Kod: Markera allt


#!/bin/bash
pwd=$(pwd)

#Läs in kolumner från "struktur".
for struktur in ${column[*]}
do
if [ -e $struktur ]
then
cd $struktur
else
mkdir $struktur
cd $struktur
fi
done
cd $pwd

Vad har jag missat?
Bilagor
Untitled1.png
Untitled1.png (8.14 KiB) Visad 781 gånger
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Enkel Bash-scriptning

Inlägg av Konservburk »

traub skrev:

Kod: Markera allt

if [ -e $struktur ]
then
cd $struktur
else
mkdir $struktur
cd $struktur
fi
Varför flyttar inte ut den gemansamma biten utanför if-satsen istället för att ha samma kod på två ställen för de olika fallen? Och så en annan sak... Vad tror du händer om $struktur existerar, men inte är en katalog, utan istället är en helt vanlig fil?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Enkel Bash-scriptning

Inlägg av Konservburk »

traub skrev:

Kod: Markera allt

#!/bin/bash
pwd=$(pwd)

...

cd $struktur

...

cd $pwd
Jag jag kan ju även tipsa om att det finns fler och ibland smidigare sätt att göra detta på. Du har till att börja med cd - som hoppar tillbaka till förra stället. Och så finns pushd och popd, vilket kan vara vettigt ifall det behövs hopp tillbaka i flera steg. Ytterligare en variant är att använda ett subskal. Då hoppar den automatiskt tillbaka när subskalet avslutas...

Kod: Markera allt

# kod

(
cd ny_katalog

# mer kod
)

# här är vi tillbaka i samma katalog som innan parantesen
Skriv svar

Återgå till "För nybörjaren"