Da ich arbeitstechnisch viel unterwegs bin, verbringe ich viele Abende in Hotels und dadurch auch in unterschiedlichen W-LAN's. Damit die Verbindung in die unterschiedlichen Netze nicht so lang dauert würde ich gern das Mounten meiner NAS abhängig von meinem SSID machen. Wie kann ich diesen abfragen?
#!/bin/sh

if SSID "athome"  #<--- das funktioniert nicht ;)
       case "$2" in
            up)
                   mount -o rw,user,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/FTP ~/FTP
                   mount -o rw,user,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/Save ~/Save
            ;;
            down)
                   umount ~/FTP
                   umaunt ~/Save
            ;;
     esac
fi
So sollte das vom Prinzip her gehen:
#!/bin/sh

SSID=$(iwconfig $1 | grep ESSID | cut -d":" -f2 | sed -e 's/"//g') # <--- SO!

#EDIT: if SSID "athome"  #<--- das funktioniert nicht ;)
if [ "$SSID" = "athome" ]; then  #<---EDIT

       case "$2" in
            up)
                   mount -o rw,user,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/FTP ~/FTP
                   mount -o rw,user,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/Save ~/Save
            ;;
            down)
                   umount ~/FTP
                   umaunt ~/Save
            ;;
     esac
fi
EDIT2: achso, ungetestet, gell 😉
Funktioniert leider nicht, oder muss ich das mounten via fstab vorbereiten?
Führ das Skript doch einfach mal in einem Terminal aus und schau ob's Fehlermeldungen gibt:
./deinscript.sh deinwlaninterface0 up
Es kommt nichts, das ist ja mein Problem.

Ist eth1 wirklich dein Wlan interface, normalerweise sind eth? LAN und nicht wlan.

an sonsten bau mal ein
echo $SSID
ein und schau ob das überhaupt klappt.
Ist eth1, hatte mich selbst drüber gewundert:

[ktt73@pc00622 ~]$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

eth1      IEEE 802.11bg  ESSID:"athome"  
          Mode:Managed  Frequency:2.457 GHz  Access Point: 00:1F:3F:18:26:4C   
          Bit Rate:54 Mb/s   Tx-Power=20 dBm   Sensitivity=8/0  
          Retry limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=0/100  Signal level=-18 dBm  Noise level=-86 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:96

an folgenden Stellen habe ich das Echo eingebaut und nummeriert:
#!/bin/sh

SSID=$(iwconfig $1 | grep ESSID | cut -d":" -f2 | sed -e 's/"//g') # <--- SO!
echo $SSID 1

#EDIT: if SSID "athome"  #<--- das funktioniert nicht ;)
if [ "$SSID" = "athome" ]; then  #<---EDIT
  echo $SSID 2
       case "$2" in
            up)
                   mount -o rw,users,guest,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/FTP ~/FTP
                   mount -o rw,users,guest,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/Save ~/Save
           echo $SSID 3
            ;;
            down)
                   umount ~/FTP
                   umount ~/Save
            ;;
     esac
 echo $SSID 4
fi
Ausgabe ist 1, entsprechend geht er nicht in die IF Anweisung rein.
[ktt73@pc00622 ~]$ sudo /etc/NetworkManager/dispatcher.d/NAS_athome.sh eth1 up
Passwort: 
athome 1
Ich sehe den Fehler zwar gerade nicht, aber du könntest das Skript mal mit der Option xtrace aufrufen, vielleicht gibt das mehr Aufschluss, dazu einfach den shebang ändern in
#!/bin/sh -x
Hier mal die ausgabe mit -x
[ktt73@pc00622 ~]$ sudo /etc/NetworkManager/dispatcher.d/NAS_athome.sh eth1 up
++ sed -e 's/"//g'
++ cut -d: -f2
++ grep ESSID
++ iwconfig eth1
+ SSID='athome  '
+ echo athome 1
athome 1
+ '[' 'athome  ' = athome ']'
habe gerade mal die IF Anweisung ins Case reingenommen dann läuft er das case durch allerdings nicht ins IF.

#!/bin/sh

SSID=$(iwconfig $1 | grep ESSID | cut -d":" -f2 | sed -e 's/"//g') # <--- SO!
echo $SSID 1



  echo $SSID 2
       case "$2" in
    
            up)
        echo $SSID 6
        if [ "$SSID" = "athome" ]; then  
                   mount -o rw,users,guest,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/FTP /home/ktt73/FTP
                   mount -o rw,users,guest,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/Save /home/ktt73/Save
           echo $SSID 3
         fi
            ;;
            down)
                   umount ~/FTP
                   umount ~/Save
            ;;
     esac
 echo $SSID 4
Die echo Ausgabe war dann:
[ktt73@pc00622 ~]$ sudo /etc/NetworkManager/dispatcher.d/NAS_athome.sh eth1 up
athome 1
athome 2
athome 6
athome 4
Edit: sehe gerade das da was mit den Leerzeichen nicht stimmt.

+ SSID='athome ' <-- 2 hinter athome
+ '[' 'athome ' = athome ']' <--- beim Vergleich einmal 2 einmal 1 Leerzeichen hinter @home

Wie bekommt man das geregelt?
Du könntest mal folgendes probieren
SSID=$(iwconfig $1 | sed  -e '/ESSID/!d;s/^[^"]*"\|"\s*//g')
Männers ihr seit spitze, es funktioniert. So hatte ich mir das vorgestellt ^^.

Könntest du mir jetzt noch erklären was deine Zeile genau macht?

speziell dieser Teil:
'/ESSID/!d;s/^[^"]*"\|"\s*//g'
Danke
Klar. Erstmal sind das 2 sed-Anweisung die durch ";" getrennt sind.
/ESSID/!d
sucht nach ESSID und löscht alle Zeilen die ESSID nicht enthalten, das ist also das gleiche wie 'grep ESSID', grep braucht man eigentlich nicht wenn man sed oder awk benutzt. Das
s/^[^"]*"\|"\s*//g'
ist ein Ausdruck zum Suchen und Ersetzen. "s" sagt sed, dass gesucht und ersetzt werden soll. Gesucht werden soll nach dem was zwischen den ersten beiden "/" steht, also
^[^"]*"\|"\s*
Das kann man aufteilen in 2 Teile
^[^"]*"
und
"\s*
Das | zwischen den Ausdrücken ist ein oder. Der erste Ausdruck sucht am Anfang der Zeile (^) nach allen Zeichen, die nicht " sind ([^"]) und das beliebig oft (*) gefolgt von einem " (").
Der zweite Ausdruck sucht nach einem " (") gefolgt von beliebig vielen whitespace-zeichen (\s*).
Ersetzt werden die gefundenen Ausdrücke durch das, was zwischen den letzten beiden '/' steht also durch nichts. Das 'g' besagt dass in der ganzen Zeile gesucht werden soll und nicht nach dem ersten Treffer aufgehört werden soll. Ohne 'g' wäre das Ergebnis also 'athome" '.
Notiz an mich: Vielleicht lohnt es sich doch mal mehr über sed zu lernen... 😉
Ich bin leicht verwirrt *fg*.

Danke
hier mal mit awk
iwconfig eth1 | awk -F\" '/ESSID/ {print $2}'
oder noch mit grep
iwconfig eth1 | grep ESSID | awk -F\" '{print $2}'
ist vielleicht nicht ganz so verwirrend 😉
Vielleicht wäre die einfachste Lösung die hier:
#!/bin/sh

if iwconfig $1 | grep -q athome; then
       case "$2" in
            up)
                   mount -o rw,users,guest,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/FTP ~/FTP
                   mount -o rw,users,guest,uid=1000,gid=1000,file_mode=0666,dir_mode=0777 -t cifs //192.168.2.5/Save ~/Save
            ;;
            down)
                   umount ~/FTP
                   umount ~/Save
            ;;
     esac
fi
Solange die SSID nicht bei der Ausgabe von iwconfig sonst wo vorkommen kann klappt das so.
Warum eigentlich gleich mit sed oder awk um sich schlagen?! 😃
das ist dann auch mehr KISS 😉
Jetzt habe ich 4 funktionierende Skripte, coole Sache. 😉

Der Vollständigkeit halber noch eine Bemerkung:

~/FTP und ~/Save sind falsch

der Pfad muss ausgeschrieben werden. Das Script läuft als root und da ich ja in mein home mounten will und nicht ins root (home)...
6 Tage später
Zum Nachtrag als Info: Die SSID bekommt man ohne grep'pen und sed'en auch mit
iwgetid -r
raus. iwgetid liefert auch sonst etliche Infos für die WLAN-Devices.