Danke für die Antwort!
Der Tipp mit dem or die hat auf jeden Fall geholfen, daran hab ich gesehen, dass er das ganze nur bei Dateien macht, die auch bisher existieren. Das konnte ich durch touchs in den Griff bekommen. An der einen oder andern Stelle waren noch Kleinigkeiten falsch, nun macht das Script was es soll. Lediglich der wpa_supplicant macht mit der erzeugten Datei noch nicht so ganz was er soll - aber damit gehe ich wohl besser in den Linux/Unix Bereich des Forums.
Naja hier mal der aktuelle Quelltext:
Code:
#!/usr/bin/perl -w
# MagicWLAN
# Autor: Alexander Feld <shadowing@fsfe.org>
system("clear");
print "Willkommen bei MagicWLAN!\n";
print "=========================\n\n";
if($> == 0 || $< == 0)
{ # UID prüfen
print "Dieses Tool wurde geschrieben, um bei der Verbindung mit WLAN-Netzen ohne Networkmanager zu helfen. Damit die Verbindung auch zu verschlüsselten WLANs klappt, muss wpa supplicant installiert sein.\n\n";
print "Bitte halte ein paar Informationen bereit, damit dieses Tool seinen Dienst verrichten kann:\n";
print "- Name deines WLAN-Interfaces (in der Regel wlan0 oder eth1)\n";
print "- SSID deines WLANs\n";
print "- Verwendete Verschlüsselung (Keine / WEP / WPA / WPA2)\n";
print "- (falls verschlüsselt) den notwendigen Key\n\n";
print "Wollen wir beginnen? (J/N) ";
$antwort_start=<STDIN>;
chomp($antwort_start);
print "\n";
if($antwort_start eq "J" || $antwort_start eq "j")
{
print "\n\n";
print "Alles klar, dann wollen wir mal!\n";
print "Welches Interface wird für WLAN verwendet?\t";
$wlan_dev=<STDIN>;
chomp($wlan_dev);
print "\nWie lautet die SSID deines WLANs?\t";
$wlan_ssid=<STDIN>;
chomp($wlan_ssid);
print "\n\nWelche Verschlüsselung wird verwendet?\n";
print "a\t Keine\n";
print "b\t WEP\n";
print "c\t WPA Personal\n";
print "d\t WPA2 Personal\n\n";
$wlan_crypt=<STDIN>;
chomp($wlan_crypt);
unless($wlan_crypt eq "a")
{
print "Wie lautet der Key?\t";
$wlan_key=<STDIN>;
chomp($wlan_key);
};
system("ifconfig ".$wlan_dev." up");
if($wlan_crypt eq "a")
{ # Unverschlüsselt
system("iwconfig ".$wlan_dev." essid ".$wlan_ssid);
};
if($wlan_crypt eq "b")
{ # WEP
system("touch /etc/wpa_supplicant_magic.conf");
open(WPACONFIG, ">/etc/wpa_supplicant_magic.conf") or die $!;
print WPACONFIG "network={\n";
print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
print WPACONFIG "scan_ssid=1\n";
print WPACONFIG "key_mgmt=NONE\n";
print WPACONFIg "wep_tx_keyidx=0\n";
print WPACONFIG "wep_key0=\"".$wlan_key."\"\n";
print WPACONFIG "}\n";
close(WPACONFIG);
system("sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d");
};
if($wlan_crypt eq "c")
{ # WPA1
system("touch /etc/wpa_supplicant_magic.conf");
open(WPACONFIG, ">/etc/wpa_supplicant_magic.conf") or die $!;
print WPACONFIG "network={\n";
print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
print WPACONFIG "scan_ssid=1\n";
print WPACONFIG "proto=WPA\n";
print WPACONFIG "key_mgmt=WPA-PSK\n";
print WPACONFIG "pairwise=TKIP\n";
print WPACONFIG "group=TKIP\n";
print WPACONFIG "psk=\"".$wlan_key."\"\n";
print WPACONFIG "}\n";
close(WPACONFIG);
system("sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d");
};
if($wlan_crypt eq "d")
{ # WPA2
system("touch /etc/wpa_supplicant_magic.conf");
open(WPACONFIG, ">/etc/wpa_supplicant_magic.conf") or die $!;
print WPACONFIG "network={\n";
print WPACONFIG "ssid=\"".$wlan_ssid."\"\n";
print WPACONFIG "scan_ssid=1\n";
print WPACONFIG "proto=RSN\n";
print WPACONFIG "key_mgmt=WPA-PSK\n";
print WPACONFIG "pairwise=CCMP\n";
print WPACONFIG "group=TKIP\n";
print WPACONFIG "psk=\"".$wlan_key."\"\n";
print WPACONFIG "}\n";
close(WPACONFIG);
system("sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d");
};
print "\n\nSoll ich per DHCP eine IP holen? (J/N)\t";
$antwort_ip=<STDIN>;
chomp($antwort_ip);
if($antwort_ip eq "J" || $antwort eq "j")
{
system("dhclient ".$wlan_dev);
};
print "\n\nSoll die Verbindung bei jedem Bootvorgang hergestellt werden? (J/N)\t";
$antwort_jederstart=<STDIN>;
chomp($antwort_jederstart);
if($antwort_jederstart eq "J" || $antwort_jederstart eq "j")
{
open(RCLOCAL, ">>/etc/rc.local");
unless($wlan_crypt eq "a")
{
print RCLOCAL "sudo wpa_supplicant -i ".$wlan_dev." -D wext -c /etc/wpa_supplicant_magic.conf -d";
}
else
{
print RCLOCAL "iwconfig ".$wlan_dev." essid ".$wlan_ssid;
};
close(RCLOCAL);
};
};
}
else
{
die("Dieses Programm muss als root ausgeführt werden\n\n");
};
Eine feste Variablendeklaration mittels my / use strict werde ich in nächster Zeit auch noch einbauen..