From af47b8f1b5e6015c0a82cc5a3667911d69146fd9 Mon Sep 17 00:00:00 2001 From: lsy Date: Tue, 19 Nov 2024 00:00:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Config/Automation/manage.sh | 132 +++++++++--------- Config/Docker/Installs/alist.sh | 8 +- Config/Docker/Installs/gitea.sh | 14 +- Config/Docker/Installs/nginx-proxy-manager.sh | 12 +- Config/Docker/manage.sh | 63 ++++----- Config/Manage/install.sh | 31 ++-- Config/Manage/unInstall.sh | 25 ++-- README.md | 87 ++++++------ 8 files changed, 181 insertions(+), 191 deletions(-) diff --git a/Config/Automation/manage.sh b/Config/Automation/manage.sh index 9d450c0..42b255b 100644 --- a/Config/Automation/manage.sh +++ b/Config/Automation/manage.sh @@ -1,72 +1,78 @@ #!/bin/bash -echo "1. 查看已安装的脚本" -echo "2. 删除脚本" -declare user_choice -read -p "请输入您的选择:" user_choice +# 显示菜单 +function show_menu() { + echo "1. 查看已安装的脚本" + echo "2. 删除脚本" +} -declare script_directory="/var/script" -echo "请输入脚本安装目录,默认是 ${script_directory}" -read -p "请输入:" script_directory +# 获取用户选择 +function get_user_choice() { + read -p "请输入您的选择:" user_choice + echo $user_choice +} -if [[ -z $script_directory ]]; then - script_directory="/var/script" -elif ! [[ -d $script_directory ]]; then - echo "该目录不存在" -fi +# 获取脚本目录 +function get_script_directory() { + local default_directory="/var/script" + read -p "请输入脚本安装目录(默认是 ${default_directory}):" script_directory + [[ -z $script_directory ]] && script_directory=$default_directory + echo $script_directory +} + +# 列出已安装的脚本 +function list_installed_scripts() { + local directory=$1 + declare -a scripts + local count=0 + + for script in "$directory"/* ; do + if [[ $script == "${directory}/*" ]]; then + echo "该目录没有脚本" + return + fi + local script_name=$(awk -F '.' '{print $1}' <<< "$(basename $script)") + if [[ $script_name == "linuxtool" ]]; then + continue + fi + count=$(( count + 1 )) + echo "${count}.${script_name}" + scripts[$count]=$script_name + done + + if [ ${#scripts[@]} == 0 ]; then + echo "该目录没有脚本" + return + fi + + echo "${scripts[@]}" +} + +# 删除脚本 +function delete_scripts() { + local scripts=("$@") + read -p "请输入要删除的序号(多个用空格隔开):" indices + for i in $indices ; do + if [[ $i =~ ^[1-9][0-9]*$ ]] && [ $i -le ${#scripts[@]} ]; then + echo "开始删除 ${scripts[$i]}" + (crontab -l 2>/dev/null | grep -v "${scripts[$i]}") | crontab - && echo "已删除脚本的自动任务" + rm -rf "$script_directory/${scripts[$i]}" &> /dev/null + echo "删除完成" + fi + done +} + +# 主程序 +show_menu +user_choice=$(get_user_choice) +script_directory=$(get_script_directory) case $user_choice in '1') - declare -a installed_scripts - declare script_name - declare script_count=0 - for script in "$script_directory"/* ; do - if [[ $script == "${script_directory}/*" ]];then - echo "该目录没有脚本" - exit - fi - script_name=$(awk -F '.' '{print $1}' <<< "$(basename $script)") - if [[ $script_name == "linuxtool" ]]; then - continue - fi - script_count=$(( script_count+1 )) - echo "${script_count}.${script_name}" - installed_scripts[$script_count]=$script_name - done - if [ ${#installed_scripts[@]} == 0 ]; then - echo "该目录没有脚本" - exit - fi - ;; + installed_scripts=($(list_installed_scripts "$script_directory")) + ;; '2') - declare -a installed_scripts - declare script_name - declare script_count=0 - for script in "$script_directory"/* ; do - if [[ $script == "${script_directory}/*" ]];then - echo "该目录没有脚本" - exit - fi - script_name=$(awk -F '.' '{print $1}' <<< "$(basename $script)") - if [[ $script_name == "linuxtool" ]]; then - continue - fi - script_count=$(( script_count+1 )) - echo "${script_count}.${script_name}" - installed_scripts[$script_count]=$script_name - done - if [ ${#installed_scripts[@]} == 0 ]; then - echo "该目录没有脚本" - exit - fi - read -p "请输入要删除的序号(多个用空格隔开):" script_name - for i in $script_name ; do - if [[ $i =~ [1-${#installed_scripts[@]}] ]]; then - echo "开始删除 ${installed_scripts[$i]}" - (crontab -l 2>/dev/null | grep -v "${installed_scripts[$i]}") | crontab - && echo "已删除脚本的自动任务" - rm -rf "$script_directory/${installed_scripts[$i]}" &> /dev/null - echo "删除完成" - fi - done - ;; + installed_scripts=($(list_installed_scripts "$script_directory")) + delete_scripts "${installed_scripts[@]}" + ;; esac \ No newline at end of file diff --git a/Config/Docker/Installs/alist.sh b/Config/Docker/Installs/alist.sh index 31d1602..32165b6 100644 --- a/Config/Docker/Installs/alist.sh +++ b/Config/Docker/Installs/alist.sh @@ -1,7 +1,7 @@ #!/bin/bash -declare installation_directory=$1 -declare web_service_port=$2 -cd $installation_directory +declare install_path=$1 +declare service_port=$2 +cd $install_path cat > "docker-compose.yml" << EOF version: '3.8' services: @@ -12,7 +12,7 @@ services: volumes: - ./:/opt/alist/data ports: - - "${web_service_port}:5244" + - "${service_port}:5244" EOF docker compose up -d || echo "安装失败" && exit declare admin_password=$( docker exec -it alist ./alist admin random | grep password | awk '{print $4}') diff --git a/Config/Docker/Installs/gitea.sh b/Config/Docker/Installs/gitea.sh index 2735abc..dc709b5 100644 --- a/Config/Docker/Installs/gitea.sh +++ b/Config/Docker/Installs/gitea.sh @@ -5,18 +5,18 @@ if ! command -v sudo &> /dev/null; then exit fi -declare installation_directory=$1 -declare web_service_port=$2 +declare install_path=$1 +declare service_port=$2 sudo useradd -m git sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key" -f /home/git/.ssh/id_rsa -N "" sudo -u git sh -c 'cat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys' sudo -u git sh -c 'chmod a+x /usr/local/bin/gitea' -sudo -u git sh -c 'echo "ssh -p '$(( web_service_port+22 ))' -o StrictHostKeyChecking=no git@127.0.0.1 \"SSH_ORIGINAL_COMMAND=\\\"\$SSH_ORIGINAL_COMMAND\\\" \$0 \$@\"" > /usr/local/bin/gitea' +sudo -u git sh -c 'echo "ssh -p '$(( service_port+22 ))' -o StrictHostKeyChecking=no git@127.0.0.1 \"SSH_ORIGINAL_COMMAND=\\\"\$SSH_ORIGINAL_COMMAND\\\" \$0 \$@\"" > /usr/local/bin/gitea' declare user_id=$( id git | awk -F'[=() ]+' '{print $2}' ) declare group_id=$( id git | awk -F'[=() ]+' '{print $5}' ) -cd $installation_directory +cd $install_path cat > "docker-compose.yml" << EOF networks: gitea: @@ -42,8 +42,8 @@ services: - /etc/localtime:/etc/localtime:ro - /home/git/.ssh/:/data/git/.ssh ports: - - "${web_service_port}:3000" - - "$(( web_service_port+22 )):22" + - "${service_port}:3000" + - "$(( service_port+22 )):22" depends_on: - db db: @@ -59,6 +59,6 @@ services: volumes: - ./mysql:/var/lib/mysql EOF -chown -R git:git $installation_directory +chown -R git:git $install_path sudo docker compose up -d diff --git a/Config/Docker/Installs/nginx-proxy-manager.sh b/Config/Docker/Installs/nginx-proxy-manager.sh index 0f444ad..46873e5 100644 --- a/Config/Docker/Installs/nginx-proxy-manager.sh +++ b/Config/Docker/Installs/nginx-proxy-manager.sh @@ -1,8 +1,8 @@ #!/bin/bash -declare installation_directory=$1 -declare web_service_port=$2 +declare install_path=$1 +declare service_port=$2 -cd $installation_directory +cd $install_path cat > docker-compose.yml << EOF services: app: @@ -11,11 +11,11 @@ services: ports: - '80:80' - '443:443' - - '${web_service_port}:81' + - '${service_port}:81' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt EOF docker compose up -d -echo "管理员邮箱: admin@example.com" -echo "管理员密码: changeme" +echo "Email: admin@example.com" +echo "Password: changeme" diff --git a/Config/Docker/manage.sh b/Config/Docker/manage.sh index b3b7a39..e779d61 100644 --- a/Config/Docker/manage.sh +++ b/Config/Docker/manage.sh @@ -13,41 +13,40 @@ if [[ -z $site_path ]]; then site_path="/var/www" elif ! [[ -d $site_path ]]; then echo "该地址不存在目录" + exit 1 fi +function list_sites() { + local site_number=0 + for site in "$site_path"/* ; do + if [[ ! -d $site ]]; then + echo "该地址不存在站点" + return + fi + site_number=$(( site_number + 1 )) + site_name=$(awk -F '.' '{print $1}' <<< "$(basename "$site")") + echo "${site_number}.${site_name}" + site_array[$site_number]=$site_name + done +} + case $user_choice in '1') - for site in "$site_path"/* ; do - if [[ $site == "${site_path}/*" ]];then - echo "该地址不存在站点" - fi - echo $site - done - ;; + list_sites + ;; '2') - declare -a site_array - declare site_name - declare site_number=0 - for site in "$site_path"/* ; do - if [[ $site == "${site_path}/*" ]];then - echo "该地址不存在站点" - exit - fi - site_number=$(( site_number+1 )) - site_name=$(awk -F '.' '{print $1}' <<< "$(basename $site)") - echo "${site_number}.${site_name}" - site_array[$site_number]=$site_name - done - read -p "请输入要删除的序号,多个用空格隔开:" selected_sites - for i in $selected_sites ; do - if [[ $i =~ [1-${#site_array[*]}] ]]; then - echo "开始删除 ${site_array[$i]}" - cd "$site_path/${site_array[$i]}" - docker compose down &> /dev/null && echo "站点已停止运行" - rm -rf "$site_path/${site_array[$i]}" &> /dev/null - echo "删除完成" - fi - done - echo "删除完成" - ;; + declare -a site_array + list_sites + read -p "请输入要删除的序号,多个用空格隔开:" selected_sites + for i in $selected_sites ; do + if [[ $i =~ ^[1-9][0-9]*$ ]] && [ "$i" -le "${#site_array[@]}" ]; then + echo "开始删除 ${site_array[$i]}" + cd "$site_path/${site_array[$i]}" || exit + docker compose down &> /dev/null && echo "站点已停止运行" + rm -rf "$site_path/${site_array[$i]}" &> /dev/null + echo "删除完成" + fi + done + echo "删除完成" + ;; esac \ No newline at end of file diff --git a/Config/Manage/install.sh b/Config/Manage/install.sh index ddae525..ff0c33a 100644 --- a/Config/Manage/install.sh +++ b/Config/Manage/install.sh @@ -64,29 +64,22 @@ fi chmod +x "$path/linuxtool/run.sh" &> /dev/null -if [[ -e "${HOME}/.bashrc" ]];then - sed -i '/alias tool.*/d' "${HOME}/.bashrc" - echo "alias tool='$path/linuxtool/run.sh'" | cat >> "${HOME}/.bashrc" - source "${HOME}/.bashrc" &> /dev/null -fi +update_alias() { + local file="$1" + if [[ -e "$file" ]]; then + sed -i '/alias tool.*/d' "$file" + echo "alias tool='$path/linuxtool/run.sh'" >> "$file" + source "$file" &> /dev/null + fi +} -if [[ -e "${HOME}/.profile" ]];then - sed -i '/alias tool.*/d' "${HOME}/.profile" - echo "alias tool='$path/linuxtool/run.sh'" | cat >> "${HOME}/.profile" - source "${HOME}/.profile" &> /dev/null -fi - -if [[ -e "${HOME}/.zshrc" ]];then - sed -i '/alias tool.*/d' "${HOME}/.zshrc" - echo "alias tool='$path/linuxtool/run.sh'" | cat >> "${HOME}/.zshrc" - source "${HOME}/.zshrc" &> /dev/null -fi - -sed -i '/alias tool.*/d' "/etc/profile" -echo "alias tool='$path/linuxtool/run.sh'" | cat >> "/etc/profile" +for file in "${HOME}/.bashrc" "${HOME}/.profile" "${HOME}/.zshrc" "/etc/profile"; do + update_alias "$file" +done alias tool="$path/linuxtool/run.sh" + echo "工具箱已经安装成功" echo "位置:${path}/linuxtool" echo "命令:tool" diff --git a/Config/Manage/unInstall.sh b/Config/Manage/unInstall.sh index e696a6b..f0d629a 100644 --- a/Config/Manage/unInstall.sh +++ b/Config/Manage/unInstall.sh @@ -2,21 +2,20 @@ declare tool_path=$(cat /etc/profile | grep "tool=" | awk -F "=" '{print $2}' | tr -d "'") tool_path=$(dirname $tool_path) rm -rf $tool_path -if [[ -e "${HOME}/.bashrc" ]];then - sed -i '/alias tool.*/d' "${HOME}/.bashrc" - source "${HOME}/.bashrc" &> /dev/null -fi -if [[ -e "${HOME}/.profile" ]];then - sed -i '/alias tool.*/d' "${HOME}/.profile" - source "${HOME}/.profile" &> /dev/null -fi +remove_alias() { + local file="$1" + if [[ -e "$file" ]]; then + sed -i '/alias tool.*/d' "$file" + source "$file" &> /dev/null + fi +} + +for file in "${HOME}/.bashrc" "${HOME}/.profile" "${HOME}/.zshrc" "/etc/profile"; do + remove_alias "$file" +done + -if [[ -e "${HOME}/.zshrc" ]];then - sed -i '/alias tool.*/d' "${HOME}/.zshrc" - source "${HOME}/.zshrc" &> /dev/null -fi -sed -i '/alias tool.*/d' "/etc/profile" echo "脚本已完整卸载,公众号 lsy22 可获取一键安装脚本" kill $PPID &> /dev/null \ No newline at end of file diff --git a/README.md b/README.md index abd3200..ac38380 100644 --- a/README.md +++ b/README.md @@ -1,79 +1,72 @@ ## 功能概述 ### 1. Automation(自动化脚本管理) -- **作用**:该分类包含与自动化脚本相关的功能,主要用于管理和执行各种自动化任务。 +- **作用**:管理和执行各种自动化任务。 - **主要文件**: - - `manage.sh`:提供用户管理脚本的功能,如查看和删除已安装的脚本。 - - `acme_update.sh`:用于更新 ACME 脚本和强制续订所有证书。 - - `backup.sh`:实现数据备份功能,支持本地、百度网盘和阿里云盘备份。 - - `menu.sh`:提供交互式菜单,允许用户选择并执行不同的功能。 - - `up-docker_compose.sh`:用于更新 Docker Compose 服务。 - - `update.sh`:自动更新系统包管理器的配置。 + - `manage.sh`:用户管理脚本。 + - `acme_update.sh`:更新 ACME 脚本和续订证书。 + - `backup.sh`:数据备份,支持多种备份方式。 + - `menu.sh`:交互式菜单,选择执行功能。 + - `up-docker_compose.sh`:更新 Docker Compose 服务。 + - `update.sh`:自动更新系统包管理器配置。 ### 2. Docker(Docker 相关功能) -- **作用**:该分类专注于 Docker 相关的功能和服务管理。 +- **作用**:Docker 功能和服务管理。 - **主要文件**: - - `image.sh`:管理 Docker 镜像的查看、停止和删除功能。 - - `manage.sh`:提供对 Docker 服务的管理功能。 - - `source.sh`:用于配置 Docker 镜像源。 - - `test.sh`:检查 Docker 是否安装。 - - `alist.sh`、`gitea.sh`、`nginx-proxy-manager.sh`、`safeline.sh`、`siyuan.sh`、`typecho.sh`、`vaultwarden.sh`、`xboard.sh`:这些脚本用于安装和配置不同的 Docker 应用程序。 + - `image.sh`:管理 Docker 镜像。 + - `manage.sh`:Docker 服务管理。 + - `source.sh`:配置 Docker 镜像源。 + - `test.sh`:检查 Docker 安装。 + - `alist.sh`、`gitea.sh`、`nginx-proxy-manager.sh`、`safeline.sh`、`siyuan.sh`、`typecho.sh`、`vaultwarden.sh`、`xboard.sh`:安装和配置不同 Docker 应用。 ### 3. Manage(系统管理) -- **作用**:该分类包含与系统管理相关的功能。 +- **作用**:系统管理相关功能。 - **主要文件**: - - `install.sh`:用于安装和配置系统工具。 - - `unInstall.sh`:用于卸载系统工具和清理相关配置。 + - `install.sh`:安装和配置系统工具。 + - `unInstall.sh`:卸载系统工具和清理配置。 ### 4. Other(其他功能) -- **作用**:该分类包含一些其他的实用功能。 +- **作用**:其他实用功能。 - **主要文件**: - - `bbr_open.sh`:用于开启 BBR 加速。 - - `language.sh`:用于更改系统语言设置。 - - `reinstall.sh`:用于重新安装系统工具。 + - `bbr_open.sh`:开启 BBR 加速。 + - `language.sh`:更改系统语言设置。 + - `reinstall.sh`:重新安装系统工具。 ### 5. User(用户管理) -- **作用**:该分类包含与用户和权限管理相关的功能。 +- **作用**:用户和权限管理功能。 - **主要文件**: - - `key.sh`:用于管理 SSH 密钥。 - - `manage.sh`:提供用户管理功能,如创建、删除用户。 - - `ssh.sh`:用于管理和配置 SSH 服务。 - - `test.sh`:检查 SSH 客户端是否安装。 + - `key.sh`:管理 SSH 密钥。 + - `manage.sh`:用户管理功能。 + - `ssh.sh`:管理和配置 SSH 服务。 + - `test.sh`:检查 SSH 客户端安装。 ### 6. Web(网页相关功能) -- **作用**:该分类主要涉及与网页相关的功能。 +- **作用**:网页相关功能。 - **主要文件**: - - `acme`:包含与 SSL 证书管理相关的脚本,如申请、管理和测试。 - - `apply.sh`:用于申请 SSL 证书。 - - `manage.sh`:管理已申请的证书。 - - `test.sh`:测试 SSL 证书的有效性。 - - `nginx`:包含与 Nginx 配置相关的脚本。 - - `install.sh`:用于安装 Nginx。 + - `acme`:SSL 证书管理脚本。 + - `apply.sh`:申请 SSL 证书。 + - `manage.sh`:管理已申请证书。 + - `test.sh`:测试 SSL 证书有效性。 + - `nginx`:Nginx 配置相关脚本。 + - `install.sh`:安装 Nginx。 - `manage.sh`:管理 Nginx 配置。 - `test.sh`:测试 Nginx 是否正常运行。 -### 7. Sources(源管理) -- **作用**:用于管理软件源的配置。 -- **主要文件**: - - `sources.sh`:提供查看和更换软件源的功能。 +### 7. Sources.sh(源管理) +- **作用**:管理软件源配置。 ### 8. VPN(VPN 管理) -- **作用**:用于管理和配置 VPN 服务。 -- **主要文件**: - - `vpn.sh`:提供 VPN 服务的安装和管理功能。 +- **作用**:VPN 服务的安装 ### 9. Software(软件管理) -- **作用**:用于安装常用软件包。 -- **主要文件**: - - +- **作用**:安装常用软件包。 + ### 菜单机制 -该系统通过菜单提供了一个用户友好的界面,允许用户选择可用的脚本进行执行。菜单机制包括以下两个子功能: +该系统通过菜单提供用户友好的界面,允许用户选择可用脚本执行。菜单机制包括以下两个子功能: #### 1. test 菜单 -- **功能**:test 菜单用于执行特定的测试脚本,验证系统功能的正常运行。用户可以选择要测试的功能,系统会根据选择执行相应的测试脚本。 -- **作用**:确保用户在执行其他操作之前,系统的相关功能正常,避免因环境问题导致的错误。 +- **功能**:执行特定测试脚本,验证系统功能正常。 #### 2. menu 菜单 -- **功能**:menu 菜单提供了一个用户友好的界面,允许用户选择可用的脚本进行执行。用户通过输入对应的序号来选择脚本,系统会根据用户的选择执行相应的操作。 -- **作用**:作为系统的入口,用户可以通过它访问其他功能,包括执行脚本、配置定时任务等。 +- **功能**:用户友好的界面,选择可用脚本执行。