Toon posts:

bash script

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeiedag,

ik ben een script aan het schrijven, in het script wordt een waarde opgevraagd van de gebruiker, deze moet gecontroleerd worden of hij tussen 1 en $x zit, als dat zo is dan moet hij een programma uitvoeren, als dat niet zo is moet hij opnieuw om input vragen. Alles lukt, alleen niet het statement om die controle uit te voeren.

Weet iemand hier hoe je in een if statement of in een while loop kan controleren of een variabele voldoet aan bovengestelde eisen?

Bedankt

mr007

  • T006
  • Registratie: Oktober 2000
  • Laatst online: 14-08 14:43
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
while [ ]; do

done

if [ $a = $b ]; then

fi

if [ $a = $b ]; then

else

fi

Zoiets ?
Denk dat je de eerste het beste kan gebruiken.

Verwijderd

Topicstarter
Dit doet volgens mij niet wat ik bedoel....

je moet $a vergelijken met een waarde tussen 1 en $b, hoe geef je dat aan in een script?

if [ $a = [ 1-$b ] ]
then
....
else
....

het is dus vrij vertaald *D iets van:

if $a between 1 and $b then
ga maar wat doen
else
geef opnieuw een waarde

Verwijderd

#!/bin/sh

VAR0=1
VAR1=$1


while [ "$VAR0" -lt "$VAR1" ]
do
if [ "$VAR0" -eq "$VAR1" ]
then
echo "hij is het zelfde"
else
echo "Hii is niet het zelfde"
fi
VAR0=`expr $VAR0 + 1`

done

exit 0



Is dit wat je zoekt.

  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
Of bedoel je deze?

#!/bin/sh

x=10

echo geef waarde
read value

while [ $value -lt $x ] && [ $value -gt 1 ]; do
echo geef opnieuw een waarde
read value
done

echo ga maar wat doen

Verwijderd

Topicstarter
Ik heb nu zoiets gebrouwen en heb er tussen een commentaar gezet, misschien heb je nu een idee wat de doel van het bestand is (het kan zijn dat er scriptfoutjes in zitten aangezien ik al een tijdje hiermee bezig ben):

#!/bin/bash

pad="/proxy/ipadressen"

x=`eval wc -l $pad/toegang | awk '{ print $1 }'`

cat -n $pad/toegang|more

echo -n "welk nummer wil je verwijderen: "

read regel

while [ ] == Hier moet de bewuste controle plaatsvinden...

do
echo -n "geef alleen een nummer tussen 1 en $x: "
read regel
done
sed -n "$regel"p "$pad/toegang"
echo -n "Weet u zeker dat u het volgende adres wilt verwijderen? (j/n)"
read antwoord
while [ $antwoord != "j" ] && [ $antwoord != "J" ] && [ $antwoord != "N" ] && [ $antwoord != "n" ]
do
echo -n "geef antwoord met j of n: "
read antwoord
done
if [ "$antwoord" = "j" ] || [ "$antwoord" = "J" ]
then
sed "$regel"d $pad/toegang > $pad/tmp
mv $pad/tmp $pad/toegang
else
echo "Er is niets verwijderd."
fi

Verwijderd

Topicstarter
Richard, met deze kan ik een heel eind komen, maar er is een maar, als je iets anders invoert in op de regel bijvoorbeeld een kmma of een letter dan werkt het niet goed meer. Integer expected en zo, eigenlijk zou ik dat ook nog even af willen vangen. Heb je daar nog ideeen over?

Ik hoor het wel en nogmaals iedereen bedankt voor zijn reacties.

  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
Om te kijken of een variabele een integer is kun je misschien iets met regular expressions (man regex) proberen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

x=10
value=-1

while [ $value -lt 1 ] || [ $value -gt $x ]; do
  echo geef een waarde
  read value

  # check if integer
  if ! echo $value | grep -q "^[0-9]\+$"; then
    value=-1
  fi

done
echo ga maar wat doen

Misschien zoiets?

Verwijderd

Topicstarter
Richard,

ik weet niet precies wat de laatste regel precies doet, maar hij werkt wel. Bedankt!

Kun je me een vrije vertaling van die regel geven?

Groetjes

Emiel

  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
Er staat dat de inhoud van de variabele 'value' wordt gevoerd aan grep die kijkt of deze inhoud aan een bepaald pattern voldoet.

In dit geval is dat het pattern "^[0-9]\+$", wat in de wereld van regular expression kan worden uitgelegd als:
code:
1
2
3
4
^     : het eerste teken (in de variabele)
[0-9] : moet gelijk zijn aan een cijfer tussen 0 en 9
\+    : en dat geldt ook voor 1 of meer volgende tekens 
$     : tot aan het einde (van de variabele)

Als niet (!) aan dit pattern wordt voldaan (en dat doen positieve integers) dan geeft grep erg stilletjes (-q) een return value van 1, zodat je weer terug in je while lus zit.

Ik hoop dat het duidelijk is zo (en kijk ook even in de FAQ voor begroetingen/afsluitingen)

Verwijderd

Topicstarter
get it :)

  • Buffy
  • Registratie: April 2002
  • Laatst online: 26-12-2024

Buffy

Fire bad, Tree pretty

Op vrijdag 26 juli 2002 10:26 schreef mr007 het volgende:
get it :)
PS: voor echte script junkies: [url="http://www.tldp.org/LDP/abs/html/index.html"]Advanced Bash-Scripting Guide[/url]

Waar ook te vinden is: [url="http://www.tldp.org/LDP/abs/html/testconstructs.html#ARITHTESTS"]Arithmetic Tests using (( ))[/url]

Veel plezier :)

That which doesn't kill us, makes us stranger - Trevor (AEon FLux)
When a finger points at the moon, the imbecile looks at the finger (Chinese Proverb)

Pagina: 1