哪一个精确的单行条件构造会在现有 Internet 连接关闭时激活它,并在现有 Internet 连接打开时停用它?
我查看了一些在线页面来了解
- “nmcli”命令
- “if then else fi” 结构
- 命令替换,即使用“$(command_name)”函数获取命令的输出
- “grep”命令用于管理 nmcli 命令输出
最终的构造应该是这样的:
if ( nmcli MyConnection status = down ); then nmcli c up id "MyConnection"; else nmcli c down id "MyConnection"; fi
注意:if 条件不是真正的代码,应该详细说明。
但是我没有找到 nmcli 命令的选项来测试连接是打开还是关闭。我考虑使用“status”选项,即:“nmcli c status id “MyConnection””,但是当“MyConnection”打开时,nmcli 会给出 grep 可解析的输出消息,而当“MyConnection”关闭时,它会返回错误并且不会退出到命令行(终端窗口中的光标停留在那里,Ctrl+C 需要恢复 shell 提示符)。
我需要一些帮助来把这些东西整理成一个完整的单行脚本,以便在
System Settings > Keyboard > Shortcuts > Custom Shortcuts
列表。
非常感谢。
PS:这个问题是根据我们之前在这里学到的内容提出的: 如何设置键盘快捷键来激活现有的互联网连接?
SO 是 Ubuntu 13.04,互联网连接类型是移动宽带
答案1
这应该可以。
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
如果您要在非 bash 环境中使用它,则需要在 bash 中包装命令,如下所示:
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'
答案2
您应该看一下高级 Bash 脚本指南:
http://www.tldp.org/LDP/abs/html/
我不会解释脚本的细节,你应该自己弄清楚,作为学习练习。
#!/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