Come impostare un singolo collegamento per attivare e disattivare una connessione Internet

2

Quale preciso costrutto condizionale a una riga attiva una connessione Internet esistente se è disattivata e la disattiva se è attiva?

Ho guardato alcune pagine online per capire l'uso di

  1. il comando "nmcli"
  2. il costrutto "if then else fi"
  3. command substition, cioè l'uso della funzione "$ (command_name)" per ottenere l'output di un comando
  4. il comando "grep" per gestire l'output del comando nmcli

Il costrutto finale dovrebbe essere di questo tipo:

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

Nota: la condizione if non è codice reale e deve essere elaborata.

Ma non ho trovato un'opzione per il comando nmcli per verificare se una connessione è attiva o meno. Ho pensato di utilizzare l'opzione "status", ad esempio: "nmcli c status id" MyConnection "", ma mentre nmcli restituisce un messaggio di output grep-parsable quando "MyConnection" è attivo, restituisce un errore e non esce riga di comando quando "MyConnection" è giù (il cursore nella finestra del terminale rimane lì e un CTRL + C è necessario per richiamare il prompt della shell).

Ho bisogno di aiuto per sistemare queste cose in uno script completo di una riga utilizzabile in

System Settings > Keyboard > Shortcuts > Custom Shortcuts

lista.

Grazie mille.

P.S .: Questa domanda segue quanto appreso qui qualche tempo fa: Come impostare una scorciatoia da tastiera per attivare una connessione Internet esistente?

SO è Ubuntu 13.04, il tipo di connessione Internet è Mobile broadband

    
posta Andrew 05.08.2013 - 14:27

2 risposte

4

Questo dovrebbe farlo.

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

Se lo userai da un ambiente non bash, avrai bisogno di racchiudere il comando in bash in questo modo:

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'
    
risposta data Oli 05.08.2013 - 14:58
1

Dovresti dare un'occhiata alla Advanced Bash Scripting Guide:

link

Non spiegherò i dettagli della sceneggiatura, dovresti immaginartelo come un esercizio di apprendimento.

#!/usr/bin/env bash
if [ -z  ]
then
    essid="MyConnection"
else
    essid=
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
    
risposta data mgor 05.08.2013 - 15:03

Leggi altre domande sui tag