吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3662|回复: 1
收起左侧

[会员申请] 申请会员ID:愿乘风归去

[复制链接]
吾爱游客  发表于 2020-4-2 00:04

申请标题:申请会员ID:愿乘风归去

1、申 请 I D:愿乘风归去
2、个人邮箱:moqiqin@live.com
3、原创技术文章:制作一键脚本的经验

制作一键脚本的经验

最近写了个脚本,总结点经验。所以我就拿我自己的脚本为例子分享一下吧。

首先介绍一下我搞这个脚本的原因:Aria2是一个基于命令行的开源下载工具,支持除了ed2k以及迅雷之外的绝大多数下载方式。其多线程下载以及可以远程控制的特性,使其得到许多人的青睐。然而,其缺点也明显,没有自带的图形管理,从而导致配置繁琐。所以我这个脚本,不仅能直接安装aria2,还能顺带把文件管理器filebrowser带上。到现在总共搞了那么几个功能:

  • 整合了File Browser的安装,使文件管理无需再通过ftp或者ssh进入服务器中操作。
  • 将Aria2c与FileBrowser添加进systemctl,并开机启动。
  • Aria2每次启动的时候会更新tracker,使bt下载更高效。tracker来源https://raw.githubusercontent.com/ngosang/trackerslist
  • 改了AriaNg网页管理界面,添加了FileBrowser的入口以管理文件,以及直接进入文件目录的入口。Aria2密钥默认为1234,可在安装时另外指定。输入http://你的ip/ariang 即可访问。
  • 每分钟刷新硬盘剩余容量,显示在网页根目录Disk_Usage.html中。网页能自动刷新。


那么,我就开始讲一下我的经验吧。

首先,一个脚本,特别是一键脚本,最主要的特性就是一按回车就可以迅速运行。所以一般情况下,脚本内部都是写死了各种要设置的参数。然而有些人可能会有不同需求,那么一键脚本有时候还得兼顾一下这些需求。

我是如何读取用户的输入的呢

这里写的是bash shell脚本,bash shell 有个接受脚本外参数的方法,使用while getopts的方式获取参数。while getopts以 ":p:a:d:f:h:" 的方式,循环将参数p,参数a,参数d等赋给opt,然后使用do的方式,对应参数的值再赋予对应的变量。就如同这里:

while getopts ":p:a:d:f:h:" opt
do
    case $opt in
        #aria2自定密码
        p)
        p=$OPTARG 
        ;;
        #是否安装apache/httpd
        a)
        a=$OPTARG
        ;;
                esac
done

根据上面这样,脚本就拥有了获取用户输入的能力

如何处理输入参数

因为一键脚本多数时候是为了方便,所以在设计之初会尽量考虑大多数人的可能需求。所以,脚本里一般会将一些参数预先设定好。

我是这样处理输入参数的,首先,我先将一些参数写好,然后再到上一节中所提到的读取用户输入。我引入一个第三参数,用户输入后,我们得进行比较,即将用户输入与预设参数比较。如果用户没有输入,就是输入为空,这时候就将预设值赋予第三参数。
在bash中,我首先给d与dir赋同值,再读取用户输入。若用户不输入,则保留原值。然后,用if [ $d !=$dir ] ; then来对两个变量进行比较,如果两者不同,就将用户输入赋值给dir。

if [ $d != $dir ] ; then
  dir=$d
fi

这样就实现了读取并使用用户输入的要求。而且用户未输入不则改变预设值。
那么,综合起来,我就做了这样的一个开头:


#预设变量
    #Aria2密码
    p=1234

    #是否安装Apache2
    a=y

    #默认网页路径
    dir="/var/www/html"
    d=$dir #预先给d赋值,免得下面要是不输入东西的话判断报错

    #filebrowser,因为GFW,国内VPS可能装不上,默认是可以装
    f=y

    #log,安装日志,保存于/root/log_of_install_aria2dash.log
    log="/root/log_of_install_aria2dash.log"
    date > $log

while getopts ":p:a:d:f:h:" opt
do
    case $opt in
        #aria2自定密码
        p)
        p=$OPTARG
        ;;
        #是否安装apache/httpd
        a)
        a=$OPTARG
        ;;
        #指定网页根目录
        d)
        d=$OPTARG
        ;;
        #是否安装filebrowser,国内建议不装
        f)
        f=$OPTARG
        ;;
        #帮助,暂时不搞
        h)
        h=$OPTARG
        ;;
        ?)
        echo "WTF???"
        exit 
        ;;
    esac
done

#若用户输入网页根目录与预设不一致,则将dir变量值改为用户设置的
if [ $d != $dir ] ; then
        echo "d!=dir"
        dir=$d

fi
echo "ariang directory is $dir" >> $log

echo "判断系统是debian,Ubuntu,Fedora,cent还是手机的turmux(咕)"

if [[  $(command -v apt)  ]] ; then
        cmd="sudo apt"
        echo "your system is Ubuntu/Debian" >>$log
        apache2="apache2"
else
        cmd="sudo yum"
        echo "your system is CentOS/Fedora. Note that cent cannot install aria2 because it lacks aria2 packge"
        echo "cent 软件源不包含aria2,所以你得自己另外寻找办法安装。具体自己百度"
        apache2="httpd"
        firewall-cmd --zone=public --add-port=80/tcp --permanent  #cent的防火墙有时候很恶心 
fi

$cmd update -y
echo "根据需要,安装Apache2或者httpd"
if [ $a = "y" ] ; then
        echo "安装$apache2"
    cmd1="$cmd install $apache2 -y"
    $cmd1
    sudo mv $dir/index.html $dir/index.html0
    systemctl restart $apache2 
else  
    echo "you choosed not to install apache2/httpd."
    
fi

```

安装软件包

一键脚本图的就是快捷方便,所以一般来说,安装软件包都是通过apt或者yum这样的包管理器去安装,而不会采取编译安装这样慢的方式。
但是,不同系统用的包管理可能不一样,所以首先要分辨系统。
command -v 命令可以用来检测一个命令是否可用,返回可执行文件路径。比如,我在ubuntu上输入command -v yum ,运行后返回是个空值,如果输入的是command -v apt,返回是路径。就像下面这样:

root@server:/# command -v yum
root@server:/# command -v apt
/usr/bin/apt

这样,我就可以先判断系统的包管理软件是什么了。当返回路径的时候,即返回值非空,为真,运行一种命令,若返回空,则运行另一些命令

if [[  $(command -v apt)  ]] ; then
        cmd="sudo apt"
        echo "your system is Ubuntu/Debian" >>$log
else
        cmd="sudo yum"
fi

对了,bash shell的空格不要吝啬,空格是有意义的。

并且通过这样的方法,可以判断自己脚本里的包有无成功安装。没成功安装的话,就将日志输出,到后期调试的时候可以知道哪一步出状况。举个例子,centOS的源里没有aria2这个包,而Fedora的源有。那么安装的时候cent就会出错。那么下面的例子就能告诉你你的必须软件是否成功安装了

if [[  $(command -v aria2c)  ]] ; then
        echo "installed aria2" >>$log
else
        echo "install aria2 failed">>$log
fi

结语

以上就是我在在做一键脚本的时候,如何兼顾快速,以及自定义输入。所以,我的脚本最终能够以这样一行命令复制粘贴运行。

1. 默认方式安装。

复制粘贴以下命令到终端,运行执行即可。全部参数采用默认设置。

#以Ubuntu为例
sudo apt install curl -y && bash <(curl -s -L https://github.com/Masterchiefm/Aria2Dash/raw/master/Aria2Dash.sh)

2.自定义参数安装

先下载脚本。

#
wget --no-check-certificate https://github.com/Masterchiefm/Aria2Dash/raw/master/install.sh
#

然后运行。

#
bash ./install.sh -a n -d 网页目录 -p aria2密码
#

例如以下命令:

bash ./install.sh -a n -d /var/web -p 1234567

意思是不安装apache2,指定将AriaNg放入/var/web内,设置Aria2的RPC密钥为1234567


运行情况

都是代码,没啥图好帖的。代码的项目是Aria2Dash,放github上。在GitHub上可以看到我发表的名称为masterchiefm,愿乘风归去。而“愿乘风归去”是我申请的id,另外我的申请邮箱名称和GitHub上的邮箱一致。这点可以在我的GitHub主页 上看到。

贴点运行效果图:

图是我放在github上的,懒得重新搞了。这个ip是vultr的,服务器已经删了,就不打码了
建议去Aria2Dash看。
12
17
18

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2020-4-2 13:44
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表