关于编写Microsoft Teams Classic清理脚本的条件判断问题
修正后的Microsoft Teams Classic清理脚本
先明确需求对应的逻辑流程:
- 优先检查
Microsoft Teams Classic.app是否存在于应用目录 - 若存在且正在运行:先终止进程,再删除应用及关联配置文件
- 若存在但未运行:直接删除应用及关联配置文件
- 若不存在:无需执行任何操作
原代码存在几处问题:
- 逻辑运算符优先级错误:
&&优先级高于||,导致条件判断不符合预期 - 进程检查语法有误:用
[ (命令) ]的方式错误,应直接利用命令的退出状态做判断 - 多余的路径判断:需求针对Classic版本,无需额外检查
Microsoft Teams.app(若需保留可自行调整)
修正后的脚本代码
#!/bin/bash TEAMS_CLASSIC_APP="/Applications/Microsoft Teams Classic.app" # 用pgrep更精准检测进程,避免grep误匹配自身 TEAMS_CLASSIC_PID=$(pgrep -f "Microsoft Teams Classic.app") # 第一步:检查应用是否存在 if [ -d "$TEAMS_CLASSIC_APP" ]; then # 第二步:检查应用是否正在运行 if [ -n "$TEAMS_CLASSIC_PID" ]; then echo "Microsoft Teams Classic 正在运行,先终止进程..." killall "Microsoft Teams Classic.app" # 可选:等待2秒确保进程完全退出,防止删除时文件被占用 sleep 2 fi echo "开始删除Microsoft Teams Classic及其配置文件..." rm -rf "$TEAMS_CLASSIC_APP" rm -rf ~/Library/Preferences/com.microsoft.teamsclassic.plist rm -rf ~/Library/Caches/com.microsoft.teamsclassic rm -rf ~/Library/Logs/com.microsoft.teamsclassic echo "删除完成" else echo "Microsoft Teams Classic 不存在,无需操作" fi
关键改进说明
- 用
pgrep -f替代ps aux | grep,更可靠地检测目标进程,避免误判 - 拆分嵌套
if语句,逻辑分层清晰,完全匹配需求的判断顺序 - 定义变量存储应用路径,提升代码的可维护性
- 增加可选
sleep命令,规避进程未完全终止时的文件锁定问题
内容的提问来源于stack exchange,提问作者Albert Chan
相关产品推荐
相关产品推荐

