Hjälp med Bash

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Hjälp med Bash

Inlägg av Magnuntu »

Tack för det :) Det gjorde susen!
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

Hjälp igen tack

Inlägg av Magnuntu »

Jag fortsätter här i min egen tråd...

Finns det något sätt att rensa ut en funktion och starta om på nytt? Om jag t.ex. har:

Kod: Markera allt

function favoritfrukt {
    echo "Vilken är din favoritfrukt?"
    read frukt;
    if [ "${frukt}" = "banan" ]; then
        echo "Vi lever inte i ett fritt land. Ändra genast din favoritfrukt!"
        RESTART_FUNCTION; # Här skulle jag vilja ha något...
    fi
    echo  "Tack för att du talar om vilken din favoritfrukt är. Och vilken tur att det inte är banan!"
}
Jag vet att detta (nedan) skulle fungera, men det kommer att ge den sista meningen flera gånger...

Kod: Markera allt

function favoritfrukt {
    echo "Vilken är din favoritfrukt?"
    read frukt;
    if [ "${frukt}" = "banan" ]; then
        echo "Vi lever inte i ett fritt land. Ändra genast din favoritfrukt!"
        favoritfrukt;
    fi
    echo  "Tack för att du talar om vilken din favoritfrukt är. Och vilken tur att det inte är banan!"
}
Finns det något? Kanske iaf stoppa resten av funktionen med exit eller något?
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

SV: Hjälp med Bash

Inlägg av Barre »

Kod: Markera allt

eftersom du ropar på funktionen "favoritfrukt" varje gång du svarar banan och när du tillslut svarar något annat så kommer den passera raden echo  "Tack för att du talar om vilken din favoritfrukt är. Och vilken tur att det inte är banan!" och skriva ut den raden oavsätt om du svarade banan eller inte..
function favoritfrukt {
    echo "Vilken är din favoritfrukt?"
    read frukt;
    if [ "${frukt}" = "banan" ]; then
        echo "Vi lever inte i ett fritt land. Ändra genast din favoritfrukt!"
        favoritfrukt;
    else
        echo  "Tack för att du talar om vilken din favoritfrukt är. Och vilken tur att det inte är banan!"
    fi
}

________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Användarvisningsbild
nicefinger
Inlägg: 1800
Blev medlem: 14 jul 2006, 08:18
OS: Annat GNU/Linux
Utgåva: 23.04 Lunar Lobster
Ort: Uddevalla

SV: Hjälp med Bash

Inlägg av nicefinger »

while ... do
Eller?
Kolsyrat gangesvatten, socker, målarfärgämne (sockerkulör), surhetsgivande medel (saltsyra), dioxin, konservmedel (E211), du-är-så-sötningsmedel (E952), arom, oxidationsmedel.
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

SV: Hjälp med Bash

Inlägg av Barre »

nicefinger skrev: while ... do
Eller?
Ett mycket bättre alternativ :)
Jag försökte bara förklara varför det skrevs ut flera gånger ....
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Hjälp med Bash

Inlägg av Magnuntu »

Tack för det :) Tänkte inte i de banorna alls, så tack!

Angående while och do... Jag har använt while en hel del i PHP, men jag har aldrig riktigt fått kläm på do. Ska kolla upp det. Allting är ju så annorlunda i bash också  :-\
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

SV: Hjälp med Bash

Inlägg av Barre »

Jo... det skulle kunna se ut så här:

Kod: Markera allt

function favoritfrukt {
    frukt="banan"
    while [ "${frukt}" = "banan" ]; do
        echo "Vilken är din favoritfrukt?"
        read frukt;
    done
    echo  "Tack för att du talar om vilken din favoritfrukt är. Och vilken tur att det inte är banan!"
}
när funktionen anropas så sätts $frukt till banan
sen upprepas allt mellan do & done så länge $frukt = banan.
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Magnuntu
Inlägg: 134
Blev medlem: 12 apr 2007, 12:05
OS: Annat GNU/Linux
Ort: Karlstad

SV: Hjälp med Bash

Inlägg av Magnuntu »

Tack, nu försår jag. Det var lättare än vad jag hade förstått det :)
Vill du ha en Linuxtidning? Skriv under här!
Musik som du aldrig har hört den förr
Användarvisningsbild
nicefinger
Inlägg: 1800
Blev medlem: 14 jul 2006, 08:18
OS: Annat GNU/Linux
Utgåva: 23.04 Lunar Lobster
Ort: Uddevalla

SV: Hjälp med Bash

Inlägg av nicefinger »

Eller såhär

Kod: Markera allt

function favoritfrukt {
    frukt="banan"
    while [ "${frukt}" = "banan" ]; do
        echo "Vilken är din favoritfrukt?"
        read frukt;
	if [ "${frukt}" = "banan" ]; then
       	 	echo "Vi lever inte i ett fritt land. Ändra genast din favoritfrukt!"
       	fi
    done
    echo  "Tack för att du talar om vilken din favoritfrukt är. Och vilken tur att det inte är banan!"
}
Kolsyrat gangesvatten, socker, målarfärgämne (sockerkulör), surhetsgivande medel (saltsyra), dioxin, konservmedel (E211), du-är-så-sötningsmedel (E952), arom, oxidationsmedel.
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

SV: Hjälp med Bash

Inlägg av Barre »

nicefinger skrev: Eller såhär

Kod: Markera allt

.....
	if [ "${frukt}" = "banan" ]; then
       	 	echo "Vi lever inte i ett fritt land. Ändra genast din favoritfrukt!"
       	fi
.....
ooops... missade det stycket ;D
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

SV: Hjälp med Bash

Inlägg av Konservburk »

Eller om man inte vill testa samma sak på två ställen
och vill slippa att sätta $frukt till banan från början:

Kod: Markera allt

favoritfrukt() {
   while
      echo 'Vilken är din favoritfrukt?'
      read frukt
      test banan = "$frukt"
   do
      echo 'Vi lever inte i ett fritt land. Ändra genast din favoritfrukt!'
   done
   echo  'Tack för att du talar om vilken din favoritfrukt är. Och vilken tur att det inte är banan!'
}
Skriv svar

Återgå till "Terminalforum"