如何用键盘快捷键开关WiFi?Automator脚本语法报错求助
解决Automator切换WiFi脚本的语法错误及逻辑问题
问题分析
你遇到的“)”后不能跟“{”的语法错误,核心原因是Automator默认可能使用sh而非bash执行脚本,sh对函数定义的语法要求更严格;同时原脚本存在函数依赖外部变量的逻辑缺陷,即使语法修复后功能也会失效。
修复后的脚本
#!/bin/bash set_wifi_on_or_off() { local interface="en$1" local target_status="$2" local toggle_to="$3" networksetup -getairportpower "$interface" | grep ": $target_status" if [ $? -eq 0 ]; then echo "WiFi interface found: $interface" networksetup -setairportpower "$interface" "$toggle_to" return 0 fi return 1 } for n in $(seq 0 10); do if set_wifi_on_or_off "$n" "On" "off"; then break; fi if set_wifi_on_or_off "$n" "Off" "on"; then break; fi done
关键修改点
- 指定bash解释器:脚本开头添加
#!/bin/bash,强制使用bash执行,规避sh的语法限制。 - 函数参数化改造:将WiFi接口编号
n作为参数传入函数,不再依赖外部变量,解决逻辑依赖问题。 - 移除不安全的eval:直接用变量拼接接口名称,避免eval带来的安全风险和语法歧义。
- 简化条件判断:用
[ $? -eq 0 ]替代test $? -eq 0,写法更通用简洁。 - 添加局部变量:用
local定义函数内变量,避免污染全局环境。
Automator设置注意事项
创建服务时需确认:
- “服务收到”选择“没有输入”,应用程序选“Finder”(或你需要触发的场景)。
- “运行Shell脚本”动作中,将“shell”选项设置为
/bin/bash,“传递输入”选“忽略输入”。
内容的提问来源于stack exchange,提问作者Yves
相关产品推荐
相关产品推荐

