具体代码如下:
#!/bin/bash
# 自动配置 ftp
# 交互式上传文件
ftp_conf(){
echo "正在配置相关文件,请稍等..."
sleep 1
cp -a /etc/vsftpd/vsftpd.conf ./
cat /etc/vsftpd/vsftpd.conf | sed "{s/^anonymous_enable=NO/anonymous_enable=YES/;s/^local_enable=NO/local_enable=YES/;s/^write_enable=NO/write_enable=YES/;s/^anon_upload_enable=NO/anon_upload_enable=YES/;s/^anon_mkdir_write_enable=NO/anon_mkdir_write_enable=YES/}" > ./vsftpd.conf
read -p "是否允许匿名用户上传文件?(y/n)" anon
if [ "$anon" == "y" ] || [ "$anon" == "Y" ] || [ "$anon" == "yes" ] || [ "$anon" == "YES" ]
then
resu=`cat /etc/vsftpd/vsftpd.conf | grep "anon_umask=022" | wc -l`
if [ $resu -eq 0 ]
then
# 允许匿名用户进行上传
echo "anon_umask=022" >> ./vsftpd.conf
elif [ $resu -gt 1 ]
then
# 保证 anon_umask=022 只有一行存在
cat /etc/vsftpd/vsftpd.conf | sed "s/anon_umask=022//" > ./vsftpd.conf
echo "anon_umask=022" >> ./vsftpd.conf
fi
elif [ "$anon" == "n" ] || [ "$anon" == "N" ] || [ "$anon" == "no" ] || [ "$anon" == "NO" ]
then
cat /etc/vsftpd/vsftpd.conf | sed "{s/^anonymous_enable=YES/anonymous_enable=NO/;s/^local_enable=NO/local_enable=YES/;s/^write_enable=NO/write_enable=YES/;s/^anon_upload_enable=NO/anon_upload_enable=YES/;s/^anon_mkdir_write_enable=NO/anon_mkdir_write_enable=YES/;s/^anon_umask=022//}" > ./vsftpd.conf
fi
mv -f ./vsftpd.conf /etc/vsftpd/vsftpd.conf
rm -rf ./vsftpd.conf
systemctl restart vsftpd
echo "配置已经完成!"
}
mkftpdir(){
echo "正在创建共享目录..."
sleep 1
mkdir /var/ftp/$1
chmod o+w /var/ftp/$1
echo "创建目录 $1 完成"
}
check_dir(){
while true
do
read -p "该共享目录不存在,是否创建该目录?(y/n)" cre
if [ "$cre" == "y" ] || [ "$cre" == "Y" ] || [ "$cre" == "yes" ] || [ "$cre" == "YES" ]
then
mkftpdir $1
break
elif [ "$cre" == "n" ] || [ "$cre" == "N" ] || [ "$cre" == "no" ] || [ "$cre" == "NO" ]
then
break
else
echo "请输入 y 或者 n"
fi
done
}
while true
do
rpm -q vsftpd &> /dev/null
# 检查vsftpd 服务是否安装
if [ $? -ne 0 ]
then
# 没有安装 vsftpd 服务,则进行安装
echo "vsftpd 服务未安装,正在安装,请稍等..."
yum=`yum -y install vsftpd &> /dev/null`
if [ $? -ne 0 ]
then
echo "请检查网络是否已经连接或者本地光盘镜像是否挂载!"
else
echo "vsftpd 已经安装成功"
ftp_conf
fi
else
# 如果已经安装了
echo "+-------------------------------------+"
echo "| 1. 上传文件到ftp指定目录 |"
echo "| 2. 上传目录到ftp指定目录 |"
echo "| 3. 在 ftp 中创建目录 |"
echo "| 4. 重置 vsftpd 配置 |"
echo "| 5. 查找文件 |"
echo "| 6. 查找目录 |"
echo "| 7. 查看 vsftpd 下的所有目录 |"
echo "| 8. 查看 vsftpd 下的所有文件 |"
echo "| 9. 删除 vsftpd 下的指定目录 |"
echo "| 10. 删除 vsftpd 下的指定文件 |"
echo "| q. 退出 |"
echo "+-------------------------------------+"
read -p "请选择进行的 ftp 相关操作:" sel
case $sel in
1)
read -p "请输入上传文件的完整绝对路径:" file
read -p "请输入要上传的位置(/var/ftp 下的目录名称):" dir
# 检查该文件是否存在
if [ ! -f $file ]
then
echo "该文件不存在!请检查文件路径或者文件名是否输入正确后重新上传"
# 检查vsftpd目录是否存在
elif [ ! -d /var/ftp/$dir ]
then
check_dir $dir
fi
cp $file /var/ftp/$dir &> /dev/null
if [ $? -eq 0 ]
then
echo "上传文件成功!"
else
echo "上传文件失败!"
fi
;;
2)
read -p "请输入上传文件的完整绝对路径:" put_dir
read -p "请输入要上传的位置(/var/ftp 下的目录名称):" aim_dir
# 检查该目录是否存在
if [ ! -d $put_dir ]
then
echo "该目录不存在!请检查目录路径或者目录名是否输入正确后重新上传"
# 检查vsftpd目录是否存在
elif [ ! -d /var/ftp/$aim_dir ]
then
check_dir $aim_dir
fi
cp -r $put_dir /var/ftp/$aim_dir &> /dev/null
if [ $? -eq 0 ]
then
echo "上传目录成功!"
else
echo "上传目录失败!"
fi
;;
3)
read -p "请输入要创建的共享目录名称:" mkshadir
mkftpdir $mkshadir
;;
4)
ftp_conf
;;
5)
read -p "请输入要查找的文件完整名称:" find_file
result=`find /var/ftp/ -type f -name "$find_file"`
lin=`find /var/ftp/ -type f -name "$find_file" | wc -l`
if [ $lin -ne 0 ]
then
echo "**********************************************************************************"
echo "文件信息:"
for i in $result
do
ls -l $i
done
echo "**********************************************************************************"
else
echo "该文件不存在!"
fi
;;
6)
read -p "请输入要查找的目录完整名称:" find_dir
res=`find /var/ftp -type d -name "$find_dir"`
li=`find /var/ftp -type d -name "$find_dir" | wc -l`
if [ $li -ne 0 ]
then
echo "**********************************************************************************"
echo "路径:[$res]"
echo "目录详情:"
ls $res
echo "**********************************************************************************"
else
echo "目录 $find_dir 不存在"
fi
;;
7)
echo "**********************************************************************************"
echo "所有目录:"
find /var/ftp/ -type d
echo "**********************************************************************************"
;;
8)
echo "**********************************************************************************"
echo "所有文件:"
find /var/ftp/ -type f
echo "**********************************************************************************"
;;
9)
read -p "请输入要删除的目录完整名称:" dir_name
resul=`find /var/ftp/ -type d -name "$dir_name"`
line1=`find /var/ftp/ -type d -name "$dir_name" | wc -l`
echo "**********************************************************************************"
echo "路径:[$resul]"
echo "目录详情:"
ls $resul
echo "**********************************************************************************"
label=0
until [ $label -eq 1 ]
do
read -p "确定要删除该目录下的所有内容吗?(y/n)" del
if [ "$del" == "y" ] || [ "$del" == "Y" ] || [ "$del" == "yes" ] || [ "$del" == "YES" ]
then
if [ $line1 -ne 0 ]
then
rm -rf $resul
echo "删除目录 $dir_name 成功!"
label=1
else
echo "该目录不存在!"
label=1
fi
elif [ "$del" == "n" ] || [ "$del" == "N" ] || [ "$del" == "no" ] || [ "$del" == "NO" ]
then
label=1
else
echo "请输入 y 或者 n"
fi
done
;;
10)
read -p "请输入要删除的文件完整名称:" file_name
result=`find /var/ftp/ -type f -name "$file_name"`
line=`find /var/ftp/ -type f -name "$file_name" | wc -l`
if [ $line -gt 1 ]
then
label2=0
until [ $label2 -eq 1 ]
do
echo "**********************************************************************************"
echo "所有同名文件详细信息:"
echo $result
echo "**********************************************************************************"
read -p "[提醒]:vsftpd 有 $line 个目录同时存在该文件,确定要全部删除吗?(y:删除全部/n:删除一个指定文件)" del_all
if [ "$del_all" == "y" ] || [ "$del_all" == "Y" ] || [ "$del_all" == "yes" ] || [ "$del_all" == "YES" ]
then
find /var/ftp/ -type f -name "$file_name" -exec rm -rf {} \; &> /dev/null
if [ $? -eq 0 ]
then
echo "删除全部同名文件 $file_name 成功!"
label2=1
else
echo "删除全部同名文件 $file_name 失败"
label2=1
fi
elif [ "$del_all" == "n" ] || [ "$del_all" == "N" ] || [ "$del_all" == "no" ] || [ "$del_all" == "NO" ]
then
read -p "请输入指定文件 $file_name 的完整绝对路径(直接复制'所有同名文件详细信息'中的完整内容即可)" perfact_file
rm -rf $perfact_file
if [ $? -eq 0 ]
then
echo "删除该指定文件 $file_name 成功"
label2=1
else
echo "删除失败"
echo "[提示]:直接把'所有同名文件详细信息'中的内容复制粘贴即可!"
fi
else
echo "请输入 y 或者 n"
fi
done
elif [ $line -eq 0 ]
then
echo "该文件不存在!"
else
label3=0
until [ $label3 -eq 1 ]
do
read -p "确定要删除该文件吗?(y/n):" del_one
if [ "$del_one" == "y" ] || [ "$del_one" == "Y" ] || [ "$del_one" == "yes" ] || [ "$del_one" == "YES" ]
then
rm -rf $result
if [ $? -eq 0 ]
then
echo "删除 $file_name 成功!"
else
echo "删除 $file_name 失败"
fi
label3=1
elif [ "$del_one" == "n" ] || [ "$del_one" == "N" ] || [ "$del_one" == "no" ] || [ "$del_one" == "NO" ]
then
label3=1
else
echo "请输入 y 或者 n"
fi
done
fi
;;
q)
echo "Byebye"
exit
;;
*)
echo "请输入正确的选项!"
;;
esac
fi
done