web-dev-qa-db-fra.com

Comment définir un seul raccourci pour activer et désactiver une connexion Internet

Quelle construction conditionnelle d'une ligne exacte active une connexion Internet existante si elle est désactivée et la désactive si elle est activée?

J'ai regardé quelques pages en ligne pour comprendre l'utilisation de

  1. la commande "nmcli"
  2. la construction "si alors sinon fi"
  3. sous-station de commande, c'est-à-dire l'utilisation de la fonction "$ (nom_commande)" pour obtenir la sortie d'une commande
  4. la commande "grep" pour gérer la sortie de la commande nmcli

La construction finale devrait être de ce type:

if ( nmcli MyConnection status = down ); then nmcli c up id "MyConnection"; else nmcli c down id "MyConnection"; fi

Remarque: la condition if n'est pas du vrai code et doit être élaborée.

Mais je n'ai pas trouvé d'option pour que la commande nmcli teste si une connexion est en haut ou en bas. J'ai pensé à utiliser l'option "status", c'est-à-dire: "nmcli c status id" MyConnection "", mais bien que nmcli donne un message de sortie grep-parsable lorsque "MyConnection" est actif, il retourne une erreur et ne revient pas à la ligne de commande lorsque "MyConnection" est en bas (le curseur dans la fenêtre du terminal y reste et un CTRL + C est nécessaire pour récupérer l'invite du shell).

J'ai besoin d'aide pour organiser ces choses en un script complet d'une ligne utilisable dans le

System Settings > Keyboard > Shortcuts > Custom Shortcuts

liste.

Merci beaucoup.

P.S .: Cette question fait suite à ce que j'ai appris ici il y a quelque temps: Comment définir un raccourci clavier pour activer une connexion Internet existante?

SO est Ubuntu 13.04, le type de connexion Internet est large bande mobile

2
Andrew

Cela devrait le faire.

if [[ -z $(nmcli c status id MyConnection | grep -E 'STATE\:\s+activated') ]]; then nmcli c up id MyConnection; else nmcli c down id MyConnection; fi

Si vous allez l'utiliser à partir d'un environnement non bash, vous devrez encapsuler la commande dans bash comme ceci:

bash -c 'if [[ -z $(nmcli c status id MyConnection | grep -E 'STATE\:\s+activated') ]]; then nmcli c up id MyConnection; else nmcli c down id MyConnection; fi'
4
Oli

Vous devriez jeter un œil au Guide de script avancé de Bash:

http://www.tldp.org/LDP/abs/html/

Je n'expliquerai pas les détails du script, vous devez le comprendre vous-même comme un exercice d'apprentissage.

#!/usr/bin/env bash
if [ -z $1 ]
then
    essid="MyConnection"
else
    essid=$1
fi

nmcli c status id $essid 2>&1 > /dev/null

if [ $? -eq 0 ]
then
    action="down"
else
    action="up"
fi

nmcli c $action id $essid
1
mgor