Sida 1 av 1

test kommandot

Postat: 05 aug 2011, 22:07
av PerJon
Hej,

Är nybörjare på Linux/Ubuntu och tänkte prova "test" kommandot men får det inte att fungera.

Om jag skriver "test 1 -eq 2" så får jag hoppar terminalen bara till en ny prompt och inget händer.

Vad gör jag för fel? skulle vara kul att kunna då jag såg att det finns många växlar att andvända till "test".

Tack på förhand

Re: test kommandot

Postat: 05 aug 2011, 22:42
av ubot
Mm, det var lite lurigt men det här fungerar ju:

Kod: Markera allt

test 3 -eq 3 && echo "$?"
ger resultatet 0 som betyder true.

Och det här ger ingenting (eftersom echo "$?" bara exekveras om test ger true):

Kod: Markera allt

test 3 -eq 4 && echo "$?"
Det här fungerar också:

Kod: Markera allt

[[ 3 -eq 3 ]] && echo "$?"
$? ger exit status.
$? reads the exit status of the last command executed. After a function returns, $? gives the exit status of the last command executed in the function. This is Bash's way of giving functions a "return value." [1]
test fungerar som det ska men du måste skicka ut resultatet av exit status för det kommer inte upp automatiskt i Terminalen. Det är nog därför du bara får en ny prompt oavsett vad du testar. Med && echo "$?" så skickar du ut resultatet i standard output om förra commandot var true.

Det här fungerar oavsett om testet ger true or false:

Kod: Markera allt

[[ 4 -eq 3 ]]; echo "$?"
eller om du hellre kör med test:

Kod: Markera allt

test 4 -eq 3; echo "$?"
Om du verkligen vill ha svaret true or false så kan du köra:

Kod: Markera allt

if [[ 3 -eq 4 ]]; then echo "TRUE"; else echo "FALSE"; fi

Re: test kommandot

Postat: 05 aug 2011, 23:10
av PerJon
Stort tack, fungerar perfekt och jag har lärt mig att jag måste få ut resultatet från exit status.

Dock så dök det upp några frågor efter att jag sett din kod :-[ . Vad gör $$, [[ ]],"" och ; ? det kanske är fel forum och fråga här och jag kanske ska söka lite mer på nätet men om du har tid får du gärna lämna en kort förklaring om inte så stänger jag ärendet.

Re: test kommandot

Postat: 05 aug 2011, 23:27
av ubot
Det är Positional Parameters (enligt Advanced Bash-Scripting Guide). Läs under "Positional Parameters" här så får du svar: http://tldp.org/LDP/abs/html/internalva ... STATVARREF
Du hittar också en förklaring av $? och $$ på samma sida under rubriken "Other Special Parameters".

Jag vet att det inte är så lätt att förstå Advanced Bash-Scripting Guide men det är en mycket bra guide för Bash (skalet i Linux d.v.s. i praktiken Terminalen) när man har börjat få lite koll på Bash.

Här är en guide till grunderna i Bash-skripting: https://help.ubuntu.com/community/Begin ... hScripting

Det är annars vanligt att man tilldelar olika variabler värden, typ så här (testa i Terminalen):

Kod: Markera allt

read -p "Ange ditt namn: " name; echo "Ditt namn är: $name"
Där kommandot read tilldelar variabeln name ditt svar och sedan skriver kommandot echo ut namnet genom att skriva ut innehållet i variabeln $name.

Re: test kommandot

Postat: 05 aug 2011, 23:32
av PerJon
Tack för dessa länkar, nu har jag och göra ett tag framöver.

Stort tack för hjälpen.

Re: test kommandot

Postat: 05 aug 2011, 23:36
av ubot
PerJon skrev:Tack för dessa länkar, nu har jag och göra ett tag framöver.

Stort tack för hjälpen.
Den här är bra att börja med om du inte redan har koll på grunderna: https://help.ubuntu.com/community/UsingTheTerminal Dessutom är det nog bättre att börja med Bash Guide for Beginners och inte Advanced Bash-Scripting Guide: http://tldp.org/LDP/Bash-Beginners-Guid ... index.html

Lycka till!