Sida 1 av 1

Enkel Bash-scriptning

Postat: 27 feb 2011, 18:04
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!

Re: Enkel Bash-scriptning

Postat: 27 feb 2011, 18:14
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.

Re: Enkel Bash-scriptning

Postat: 27 feb 2011, 20:58
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.

Re: Enkel Bash-scriptning

Postat: 27 feb 2011, 20:58
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.

Re: Enkel Bash-scriptning

Postat: 27 feb 2011, 21:22
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

Re: Enkel Bash-scriptning

Postat: 27 feb 2011, 22:14
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.

Re: Enkel Bash-scriptning

Postat: 01 mar 2011, 16:08
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?

Re: Enkel Bash-scriptning

Postat: 01 mar 2011, 17:26
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?

Re: Enkel Bash-scriptning

Postat: 01 mar 2011, 17:33
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