Hjälp med if satser

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
bitbytare
Inlägg: 10
Blev medlem: 09 jan 2009, 01:09
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS

Hjälp med if satser

Inlägg av bitbytare »

Jag har försökt och få till detta nedan två kvällar nu.
(Är helt enkelt ingen klippa på det här ??? )

Har en fil som skapas automatiskt, ip.txt
Vill med hjälp av den skriva skript.pl
Har skalat bort alla parenteser etc. blir ju bara fel ändå...
Det är viktigt att stjärnan fungerar efter ifsatsen.

Jo, RTFM. Jag vet, men jag har försökt...
Några tips på bra läsning?

Enklast är väl att förklara så här:
(För att få fram principen.)

ip.txt:
-------

192.168.1.1

***********

skript.pl:
-----------

if ip.txt 192.168.*
echo "Du har en intern ipadress."

if ip.txt 85.227.*
echo "Du har en extern ipadress."

if ip.txt "something else"
echo "Du har ingen Internet anslutning."
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Hjälp med if satser

Inlägg av andol »

Tja, här har du en minimal skript.pl som löser problemet åt dig.

Kod: Markera allt

#!/usr/bin/perl

use strict;

open(IPFIL, "./ip.txt");
my $ip = <IPFIL>;
chomp($ip);

if ($ip =~ /192\.168\.\d{1,3}\.\d{1,3}/){
    print "Du har en intern ip-adress.\n";
}elsif ($ip =~ /85\.227\.\d{1,3}\.\d{1,3}/){
    print "Du har en extern ip-adress.\n";
}else{
    print "Du har ingen Internet-anslutning.\n";
}
Notera att det här skriptet utgår från antagandet att ip-adressen står på första raden i textfilen.

Fråga på det du inte förstår.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Hjälp med if satser

Inlägg av mcNisse »

Här har du en skalskripts lösning.

Kod: Markera allt

ip=$(cat ip,txt)
if [  ${ip#192.168} != $ip ]
then 
  echo  "Du har en intern ipadress."
elif [ ${ip#85.22} != $ip ] 
then
  echo "Du har en extern ipadress."
else
  echo "Du har ingen Internet anslutning."
fi
bitbytare
Inlägg: 10
Blev medlem: 09 jan 2009, 01:09
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS

Re: Hjälp med if satser

Inlägg av bitbytare »

;D
TACK!

Det var ett svar snabbare och bättre än jag räknat med.
Hela lösningen!

Har provat båda och det fungerar klockrent..
Ska sätta mig och kolla noga och kanske till och med lära mig något på vägen nu ;)

Tack!!
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Hjälp med if satser

Inlägg av andol »

@bitbytare: Lämplig övning för dig nu är att igenom "brister" i skripten, vilka situationen de inte klarar av etc.

Mitt skript är kraftigt förenklat; både för att det skulle gå snabbare att skriva, men även för att vara lättare att läsa och förstå. I många situationer klarar man sig dock på något enkelt och hyfsat fungerade, men ska skriptet ingå i någon form utav automatik vill man i regel har något mera robust.
bitbytare
Inlägg: 10
Blev medlem: 09 jan 2009, 01:09
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS

Re: Hjälp med if satser

Inlägg av bitbytare »

Mitt egentliga syfte var att sammanfoga det med ett skript till conky.
(Ett program för att visa info på skrivbordet.)
Ska justera det så man ser när VPN-tunneln är aktiverad och vilken ip jag har.

Jag har tidigare använt ett enklare skript som bara visade ansluten eller error.

Men nu har jag nog så jag ska få ihop grejerna.
Klart man kan lägga in fler grejer, men jag är nöjd så här, ska bara justera så utdatan blir som tänkt.

Men visst ska jag använda det till att lära mig på vägen med :)
Tack!
bitbytare
Inlägg: 10
Blev medlem: 09 jan 2009, 01:09
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS

Re: Hjälp med if satser

Inlägg av bitbytare »

Får inte ordning på det...

syntax error at ./myip.pl line 13, near "elsif"
syntax error at ./myip.pl line 15, near "}"
Execution of ./myip.pl aborted due to compilation errors.


#!/usr/bin/perl
use IO::Socket::INET;
use warnings;
use strict;
my $ip;
my $sock = IO::Socket::INET->new('checkip.dyndns.org:80');
if ($sock) {
print $sock 'GET / HTTP/1.0',"\n\n";
}
while (<$sock>) {
if ($_ =~ /body/) { /(85.227.\d{1,3}.\d{1,3})/; $ip = $1; }
print "Bredbandsbolaget $ip > ~/.myip\n";
elsif ($_ =~ /body/) { /(95.211.\d{1,3}.\d{1,3})/; $ip = $1; }
print "VPN-tunnel, Holland IP: $ip > ~/.myip\n";
}else{
print "Du har ingen Internet-anslutning.> ~/.myip\n";
}
exit;

Jag lyckades efter många om och men bygga om if raderna så det blev några error mindre,
men dom två sista felen får jag inte bort :(
Tycker jag har provat alla tänkabara alternativ med att ta bort och lägga till paranteser etc.
Någon med en god idé?
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Hjälp med if satser

Inlägg av andol »

Om inte annat så ser det ju ut att saknas lite hakparenteser...

Indentera förövrigt gärna koden då. Den tänkte strukturen framträder tydligare då.
Skriv svar

Återgå till "Terminalforum"