← Back to team overview

sslug-teknik team mailing list archive

Re: Shell script større end og mindre ind

 

On Wed, Jul 30, 2008 at 06:47:00 +0000, mikkel meinike wrote:
> HEJ
> Kan man i et bash shell script lave en conditional expression som i en og 
> samme  expression tester om en variable er større end og mindre end. F. 
> eks. Større end 25 og mindre end 50. Hvis ja er der ikke nogen som vil 
> skrive denne test expression for mig så jeg kan få syntaksen. 
> Tillægsspørgsmål mest for forståelsens skyld. Jeg har læst om case 
> kommandoen i shell script hvor man kan teste f. eks. en variable og så 
> have flere forskellige mulige forløb alt afhængigt af hvilket resultat 
> testen giver. Jeg tænker om man ikke kunne gøre presist det samme ved at 
> have en række "if than fi" efter hinanden. Som tester og har forskellig 
> udfald for de forskellige test resultater. Jeg ved ikke om mit spørgsmål 
> er til at fatte men hvis der er kunne i måske forklare mig hvorfor man 
> evt. ikke skulle kunne gøre det med en række "if than fi" /mikkel      

case er mest til match af en eller flere :

eksempel:

case "$var" in 
 jens)  i=10 ;;	       # match kun jens
 lars|bo)  i=20;;      # match lars eller bo
 *)  echo "forkert navn"
     i=0;;
esac

if er med if, else og elif


Se "man bash" for mere om den shell der hedder "bash"
som oftest anvendes. I Ubuntu og Debian bruges idag
en mindre shell som /bin/sh så dine scripts bør have 
første linie som 
  #!/bin/bash
hvis du anvender konstruktioner der kun findes i bash
og ikke i "sh".


PS.

I forbindelse med expressions (f.eks. i if ) bruges ofte
test som også kan skrives som [ .
Der er en manual side til "test" som er omtrent den der er implementeret
i bash :  "man test"

nogle eksempler med "if":


a="to"
b=3

if test "$a" = "to" 
then
  echo "a er to"
else
  echo "a er ikke to"
fi

if [ "$a" = "to" ]
then
  ...osv...


if [ "$a" = "to" -a $b -ge 3 ]
then 
 echo "a er to og b => 3"
elif [ "$a" = "to" ] 
then
 echo "a er to"
elif [ $b -ge 3 ] 
then
 echo "b >= 3"
else
 echo " ;-( "
fi



 

-- 
mvh Frank Damgaard  | 



Follow ups

References