shell脚本-ftp自动登录
AI-摘要
切换
Tianli GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
#!/bin/bash
#zach 20260122
# 强制指定bash解释器,避免sh/dash兼容问题
set -uo pipefail # 去掉-e(避免单步命令失败直接退出,便于精准控制错误)
# ====================== 预置FTP配置(请根据实际情况修改)======================
FTP_IP="192.168.1.1" # 你的FTP服务器IP
FTP_PORT="21" # FTP端口
FTP_USER="test" # FTP用户名
FTP_PASS="123456" # FTP密码
LOCAL_DOWNLOAD_DIR="." # 本地下载目录(去掉末尾/,避免lcd语法错误)
# ==============================================================================
# 函数:检查原生ftp是否安装
check_ftp() {
if ! command -v ftp &> /dev/null; then
echo "错误:系统未安装原生ftp工具!"
echo "Debian/Ubuntu: sudo apt update && sudo apt install -y ftp"
echo "CentOS/RHEL: sudo yum install -y ftp"
exit 1
fi
}
# 函数:生成ftp批处理指令文件(展示根目录)
generate_list_cmds() {
local cmd_file="/tmp/ftp_list_cmds_$$.txt"
cat > "${cmd_file}" << EOF
user ${FTP_USER} ${FTP_PASS}
cd /
ls -l
quit
EOF
echo "${cmd_file}"
}
# 函数:展示FTP根目录文件
show_ftp_root_files() {
echo "===== 正在连接FTP服务器 ${FTP_IP}:${FTP_PORT} ====="
local cmd_file=$(generate_list_cmds)
# 执行ftp并捕获输出,便于排查
ftp_output=$(ftp -inv ${FTP_IP} ${FTP_PORT} < "${cmd_file}")
local exit_code=$?
rm -f "${cmd_file}"
# 输出FTP执行结果
echo "${ftp_output}"
if [ ${exit_code} -ne 0 ] || echo "${ftp_output}" | grep -q "530 Login incorrect"; then
echo "错误:FTP连接/列文件失败!请检查账号密码或IP端口。"
exit 1
fi
echo "===== FTP根目录文件展示完成 =====
"
}
# 函数:交互式下载文件
download_file() {
read -p "请输入你要下载的文件名(直接回车退出):" filename
if [ -z "${filename}" ]; then
echo "你选择退出下载,脚本即将结束。"
exit 0
fi
# 生成下载指令文件(修复lcd/get语法)
local download_cmd_file="/tmp/ftp_download_cmds_$$.txt"
cat > "${download_cmd_file}" << EOF
user ${FTP_USER} ${FTP_PASS}
cd /
lcd ${LOCAL_DOWNLOAD_DIR}
binary # 强制二进制模式,避免文件损坏(图片/压缩包必备)
get "${filename}"
quit
EOF
echo "
===== 正在下载文件:${filename} ====="
# 捕获下载过程输出,用于判断是否成功
download_output=$(ftp -inv ${FTP_IP} ${FTP_PORT} < "${download_cmd_file}")
local exit_code=$?
rm -f "${download_cmd_file}"
# 输出下载过程
echo "${download_output}"
# 精准判断下载是否成功(检查关键提示)
if echo "${download_output}" | grep -qE "226 Transfer complete|150 Opening BINARY mode data connection"; then
echo "✅ 文件 ${filename} 下载成功!保存路径:${LOCAL_DOWNLOAD_DIR}/${filename}"
else
echo "❌ 文件 ${filename} 下载失败!可能原因:文件不存在/文件名错误。"
exit 1
fi
}
# 主程序
main() {
check_ftp
show_ftp_root_files
download_file
echo "
===== 脚本执行完成,已退出FTP连接 ====="
exit 0
}
# 启动主程序
main
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
作者编辑不易,如有转载请注明出处。完整转载来自https://wangairui.com 网站名称:猫扑linux
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

