Ubuntu 16.04脚本中rm通配符或wget变量展开故障排查
解决Ubuntu 16.04下phpMyAdmin自动化脚本的部分执行问题
我来帮你排查并修复这个脚本的部分执行问题——这几个都是自动化脚本里很常见的路径、权限和逻辑问题,咱们逐个拆解解决:
问题根源分析
先梳理每个异常点的常见原因:
rm命令的潜在问题:要么是用了相对路径(脚本执行时工作目录变化导致路径失效),要么没加-f参数触发交互式确认,卡住了后续执行;也可能目标目录不存在直接报错中断脚本。wget下载到主目录:核心原因是没明确指定下载目录,或者指定的目录不存在,wget默认就会下载到当前工作目录(也就是你的主目录,因为脚本在~/myScripts/,执行时默认工作目录是~)。mv命令未完成:大概率是你脚本里写死了解压后的目录名,但phpMyAdmin最新压缩包解压后目录带版本号(比如phpMyAdmin-5.2.1-all-languages),导致mv找不到源目录;也可能是目标路径权限不足,或者目标目录没提前清理。
针对性修复方案
1. 让rm命令稳定执行
用绝对路径+强制删除参数,再加上存在性判断,避免报错中断:
# 定义目标目录的绝对路径 PMA_OLD_DIR="/var/www/html/phpmyadmin" if [ -d "$PMA_OLD_DIR" ]; then # sudo用来确保有权限删除web目录下的文件 sudo rm -rf "$PMA_OLD_DIR" fi
加
-rf是为了递归删除目录且不弹出确认提示,避免脚本卡在交互环节。
2. 让wget下载到指定目录
必须用-P参数指定下载目录,且提前用mkdir -p创建目录(-p会自动创建多级目录,且目录已存在时不报错):
DOWNLOAD_DIR="/tmp/pma_temp" # 先创建下载目录 mkdir -p "$DOWNLOAD_DIR" # 用-P指定下载到这个目录 wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -P "$DOWNLOAD_DIR"
3. 修复mv找不到源目录的问题
phpMyAdmin的解压目录带版本号,不能写死名称,用通配符匹配获取实际目录名:
# 解压到临时目录 unzip "$DOWNLOAD_DIR/phpMyAdmin-latest-all-languages.zip" -d "$DOWNLOAD_DIR" # 用通配符匹配解压后的目录 PMA_UNZIPPED=$(ls -d "$DOWNLOAD_DIR/phpMyAdmin-"*) # 移动到目标路径,同样需要sudo确保权限 sudo mv "$PMA_UNZIPPED" "/var/www/html/phpmyadmin"
完整的修复后脚本
把上面的逻辑整合起来,给你一个可直接用的版本:
#!/bin/bash # 脚本路径:~/myScripts/tp_pma.sh # 定义所有绝对路径,避免工作目录变化导致错误 PMA_TARGET="/var/www/html/phpmyadmin" TEMP_DIR="/tmp/pma_download" PMA_ZIP_URL="https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip" PMA_ZIP_FILE="$TEMP_DIR/phpMyAdmin-latest-all-languages.zip" # 1. 清理旧的phpMyAdmin目录 echo "正在清理旧的phpMyAdmin目录..." if [ -d "$PMA_TARGET" ]; then sudo rm -rf "$PMA_TARGET" fi # 2. 创建临时下载目录并下载压缩包 echo "创建临时下载目录..." mkdir -p "$TEMP_DIR" echo "开始下载最新版phpMyAdmin..." wget "$PMA_ZIP_URL" -P "$TEMP_DIR" # 3. 解压压缩包 echo "正在解压压缩包..." unzip "$PMA_ZIP_FILE" -d "$TEMP_DIR" # 4. 移动解压后的目录到目标路径 PMA_UNZIPPED_DIR=$(ls -d "$TEMP_DIR/phpMyAdmin-"*) echo "移动文件到目标目录..." sudo mv "$PMA_UNZIPPED_DIR" "$PMA_TARGET" # 5. 清理临时文件 echo "清理临时文件..." rm -rf "$TEMP_DIR" echo "✅ phpMyAdmin更新完成!"
最后要做的几件事
- 给脚本加执行权限:
chmod +x ~/myScripts/tp_pma.sh - 执行脚本时用sudo确保权限:
sudo ~/myScripts/tp_pma.sh - 如果wget下载失败,先手动访问那个URL确认是否能正常打开(偶尔phpMyAdmin的下载链接会更新)
内容的提问来源于stack exchange,提问作者Arcticooling
相关产品推荐
相关产品推荐

