#! /bin/bash
installFTP(){
echo "installing . . . "
# 下载vsftpd 同时输出结果 “Complete”或“Nothing to do”
yum -y install vsftpd | grep -E "Complete|Nothing to do"
}
versionFTP(){
# 获取当前的版本号
rpm -qa vsftpd
}
passwdFTP(){
# 获得上传下载文件的路径
cat /etc/passwd | grep "ftp" | cut -f2 -d " " | cut -f2 -d ":"
}
mkdirFTP(){
# 创建文件
# 由于这里已经定义过输出 将stderr内容清除
# 清除使用/dev/null
mkdir $1 2> /dev/null
}
chmodFTP(){
# 给文件赋予权限 777
# 777权限=r:4 + w:2 + x:1
# 对所有用户:可读可写可执行
chmod 777 $1
}
find_in_file(){
# 在文件$1 中查找内容$2
# 用/dev/null 清除stdout的输出
cat $1 | grep -c "<-- $2 -->"
}
matching_num(){
# 返回文件$1与文本中内容$2匹配的行数
cat $1 | grep -n "$2" | cut -f1 -d ":"
}
add_line_at_end(){
# 如果查找不到当前行 就在文件内容最后输入当前行
# 用/dev/null 清除stdout的输出
find_in_file $1 $2
if [ "$?" -eq "0" ]; then
# 使用 “>>” 标准输出追加重定向方式
echo "$2" >> "$1"
fi
}
del_line(){
# 删除文件$1中能与内容$2匹配的行
sed -i "/$2/d" $1
}
add_line(){
# 在文件$1指定位置$3处添加内容$2
sed -i "/$3/i $2\n" $1
}
echo "Do you want to install vsftp? [y/n]"
read ans
if [ "$ans"="y" ]; then
installFTP $ans
# 如果当前安装下载成功
if [ "$?" -eq "0" ]; then
echo "successful installed!"
version=$(versionFTP)
echo -n "current verion number:"
# 用cut切割字符串 得到当前vsftpd的版本号
# 版本号为以“-”为分隔符的第二个子串
echo "$version" | cut -f2 -d "-"
fi
else
echo "Skip the download step!"
fi
echo "Do you want to make a new documents? [y/n]"
read ans
if [ "$ans" = "y" ]; then
# 查询当前的FTP路径
pwdFTP=$(passwdFTP)
echo "ftp passed: $pwdFTP"
# 输入上传与下载的文件名的名称
echo -n "Enter trhe upload/download file name: "
read filename
# 拼接字符串
filedir="$pwdFTP/$filename"
# echo "$filedir"
# 创建文件夹
mkdirFTP $filedir
# 进行测试
if [ "$?" -eq "0" ]; then
echo "File successful set up!"
else
echo "File exists!"
fi
# 赋予权限
chmodFTP $filedir
# 进行测试
if [ "$?" -eq "0" ]; then
echo "Grand permission successfully!"
else
echo "Failed to grant permission!"
fi
fi
echo "Do you want anonymous users to upload&download? [y/n]"
read ans
if [ "$ans" = "y" ]; then
# 已知vsftpd配置文件的完整路径
confpath="/etc/vsftpd/vsftpd.conf"
echo "The current path of the configure file is: $confpath"
# 对当前文件进行处理
echo "Modifying. . . "
# 获取当前应该写入的行数num
num=$(matching_num $confpath $annocontents)
# 用let命令将num自减
# 使用算术计算表达式
let num=$[num-1]
# 先删除注释行
del_line $confpath $annocontents
# 在文件指定处批量添加内容
for i in ${addcontents[*]}
do
res=$(find_in_file $confpath "$i")
# 测试函数返回结果
if [ "$res" -eq "0" ]; then
add_line $confpath $i $num
echo "$i modified."
else
echo "$i exists!"
fi
done
fi
使用方式看这里!!!!
step1
step2
step3