简化了一些脚本

This commit is contained in:
lsy 2024-11-19 00:00:28 +08:00
parent 7cd0bf71de
commit af47b8f1b5
8 changed files with 181 additions and 191 deletions

View File

@ -1,72 +1,78 @@
#!/bin/bash #!/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}" function get_user_choice() {
read -p "请输入:" script_directory read -p "请输入您的选择:" user_choice
echo $user_choice
}
if [[ -z $script_directory ]]; then # 获取脚本目录
script_directory="/var/script" function get_script_directory() {
elif ! [[ -d $script_directory ]]; then local default_directory="/var/script"
echo "该目录不存在" read -p "请输入脚本安装目录(默认是 ${default_directory}" script_directory
fi [[ -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 case $user_choice in
'1') '1')
declare -a installed_scripts installed_scripts=($(list_installed_scripts "$script_directory"))
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
;;
'2') '2')
declare -a installed_scripts installed_scripts=($(list_installed_scripts "$script_directory"))
declare script_name delete_scripts "${installed_scripts[@]}"
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
;;
esac esac

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
declare installation_directory=$1 declare install_path=$1
declare web_service_port=$2 declare service_port=$2
cd $installation_directory cd $install_path
cat > "docker-compose.yml" << EOF cat > "docker-compose.yml" << EOF
version: '3.8' version: '3.8'
services: services:
@ -12,7 +12,7 @@ services:
volumes: volumes:
- ./:/opt/alist/data - ./:/opt/alist/data
ports: ports:
- "${web_service_port}:5244" - "${service_port}:5244"
EOF EOF
docker compose up -d || echo "安装失败" && exit docker compose up -d || echo "安装失败" && exit
declare admin_password=$( docker exec -it alist ./alist admin random | grep password | awk '{print $4}') declare admin_password=$( docker exec -it alist ./alist admin random | grep password | awk '{print $4}')

View File

@ -5,18 +5,18 @@ if ! command -v sudo &> /dev/null; then
exit exit
fi fi
declare installation_directory=$1 declare install_path=$1
declare web_service_port=$2 declare service_port=$2
sudo useradd -m git 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 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 '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 '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 user_id=$( id git | awk -F'[=() ]+' '{print $2}' )
declare group_id=$( id git | awk -F'[=() ]+' '{print $5}' ) declare group_id=$( id git | awk -F'[=() ]+' '{print $5}' )
cd $installation_directory cd $install_path
cat > "docker-compose.yml" << EOF cat > "docker-compose.yml" << EOF
networks: networks:
gitea: gitea:
@ -42,8 +42,8 @@ services:
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- /home/git/.ssh/:/data/git/.ssh - /home/git/.ssh/:/data/git/.ssh
ports: ports:
- "${web_service_port}:3000" - "${service_port}:3000"
- "$(( web_service_port+22 )):22" - "$(( service_port+22 )):22"
depends_on: depends_on:
- db - db
db: db:
@ -59,6 +59,6 @@ services:
volumes: volumes:
- ./mysql:/var/lib/mysql - ./mysql:/var/lib/mysql
EOF EOF
chown -R git:git $installation_directory chown -R git:git $install_path
sudo docker compose up -d sudo docker compose up -d

View File

@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
declare installation_directory=$1 declare install_path=$1
declare web_service_port=$2 declare service_port=$2
cd $installation_directory cd $install_path
cat > docker-compose.yml << EOF cat > docker-compose.yml << EOF
services: services:
app: app:
@ -11,11 +11,11 @@ services:
ports: ports:
- '80:80' - '80:80'
- '443:443' - '443:443'
- '${web_service_port}:81' - '${service_port}:81'
volumes: volumes:
- ./data:/data - ./data:/data
- ./letsencrypt:/etc/letsencrypt - ./letsencrypt:/etc/letsencrypt
EOF EOF
docker compose up -d docker compose up -d
echo "管理员邮箱: admin@example.com" echo "Email: admin@example.com"
echo "管理员密码: changeme" echo "Password: changeme"

View File

@ -13,41 +13,40 @@ if [[ -z $site_path ]]; then
site_path="/var/www" site_path="/var/www"
elif ! [[ -d $site_path ]]; then elif ! [[ -d $site_path ]]; then
echo "该地址不存在目录" echo "该地址不存在目录"
exit 1
fi 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 case $user_choice in
'1') '1')
for site in "$site_path"/* ; do list_sites
if [[ $site == "${site_path}/*" ]];then ;;
echo "该地址不存在站点"
fi
echo $site
done
;;
'2') '2')
declare -a site_array declare -a site_array
declare site_name list_sites
declare site_number=0 read -p "请输入要删除的序号,多个用空格隔开:" selected_sites
for site in "$site_path"/* ; do for i in $selected_sites ; do
if [[ $site == "${site_path}/*" ]];then if [[ $i =~ ^[1-9][0-9]*$ ]] && [ "$i" -le "${#site_array[@]}" ]; then
echo "该地址不存在站点" echo "开始删除 ${site_array[$i]}"
exit cd "$site_path/${site_array[$i]}" || exit
fi docker compose down &> /dev/null && echo "站点已停止运行"
site_number=$(( site_number+1 )) rm -rf "$site_path/${site_array[$i]}" &> /dev/null
site_name=$(awk -F '.' '{print $1}' <<< "$(basename $site)") echo "删除完成"
echo "${site_number}.${site_name}" fi
site_array[$site_number]=$site_name done
done echo "删除完成"
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 "删除完成"
;;
esac esac

View File

@ -64,29 +64,22 @@ fi
chmod +x "$path/linuxtool/run.sh" &> /dev/null chmod +x "$path/linuxtool/run.sh" &> /dev/null
if [[ -e "${HOME}/.bashrc" ]];then update_alias() {
sed -i '/alias tool.*/d' "${HOME}/.bashrc" local file="$1"
echo "alias tool='$path/linuxtool/run.sh'" | cat >> "${HOME}/.bashrc" if [[ -e "$file" ]]; then
source "${HOME}/.bashrc" &> /dev/null sed -i '/alias tool.*/d' "$file"
fi echo "alias tool='$path/linuxtool/run.sh'" >> "$file"
source "$file" &> /dev/null
fi
}
if [[ -e "${HOME}/.profile" ]];then for file in "${HOME}/.bashrc" "${HOME}/.profile" "${HOME}/.zshrc" "/etc/profile"; do
sed -i '/alias tool.*/d' "${HOME}/.profile" update_alias "$file"
echo "alias tool='$path/linuxtool/run.sh'" | cat >> "${HOME}/.profile" done
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"
alias tool="$path/linuxtool/run.sh" alias tool="$path/linuxtool/run.sh"
echo "工具箱已经安装成功" echo "工具箱已经安装成功"
echo "位置:${path}/linuxtool" echo "位置:${path}/linuxtool"
echo "命令tool" echo "命令tool"

View File

@ -2,21 +2,20 @@
declare tool_path=$(cat /etc/profile | grep "tool=" | awk -F "=" '{print $2}' | tr -d "'") declare tool_path=$(cat /etc/profile | grep "tool=" | awk -F "=" '{print $2}' | tr -d "'")
tool_path=$(dirname $tool_path) tool_path=$(dirname $tool_path)
rm -rf $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 remove_alias() {
sed -i '/alias tool.*/d' "${HOME}/.profile" local file="$1"
source "${HOME}/.profile" &> /dev/null if [[ -e "$file" ]]; then
fi 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 可获取一键安装脚本" echo "脚本已完整卸载,公众号 lsy22 可获取一键安装脚本"
kill $PPID &> /dev/null kill $PPID &> /dev/null

View File

@ -1,79 +1,72 @@
## 功能概述 ## 功能概述
### 1. Automation自动化脚本管理 ### 1. Automation自动化脚本管理
- **作用**该分类包含与自动化脚本相关的功能,主要用于管理和执行各种自动化任务。 - **作用**:管理和执行各种自动化任务。
- **主要文件** - **主要文件**
- `manage.sh`提供用户管理脚本的功能,如查看和删除已安装的脚本。 - `manage.sh`:用户管理脚本。
- `acme_update.sh`用于更新 ACME 脚本和强制续订所有证书。 - `acme_update.sh`:更新 ACME 脚本和续订证书。
- `backup.sh`实现数据备份功能,支持本地、百度网盘和阿里云盘备份 - `backup.sh`数据备份,支持多种备份方式
- `menu.sh`提供交互式菜单,允许用户选择执行不同的功能。 - `menu.sh`:交互式菜单,选择执行功能。
- `up-docker_compose.sh`用于更新 Docker Compose 服务。 - `up-docker_compose.sh`:更新 Docker Compose 服务。
- `update.sh`:自动更新系统包管理器配置。 - `update.sh`:自动更新系统包管理器配置。
### 2. DockerDocker 相关功能) ### 2. DockerDocker 相关功能)
- **作用**该分类专注于 Docker 相关的功能和服务管理。 - **作用**Docker 功能和服务管理。
- **主要文件** - **主要文件**
- `image.sh`:管理 Docker 镜像的查看、停止和删除功能 - `image.sh`:管理 Docker 镜像。
- `manage.sh`提供对 Docker 服务管理功能 - `manage.sh`Docker 服务管理。
- `source.sh`用于配置 Docker 镜像源。 - `source.sh`:配置 Docker 镜像源。
- `test.sh`:检查 Docker 是否安装。 - `test.sh`:检查 Docker 安装。
- `alist.sh`、`gitea.sh`、`nginx-proxy-manager.sh`、`safeline.sh`、`siyuan.sh`、`typecho.sh`、`vaultwarden.sh`、`xboard.sh`这些脚本用于安装和配置不同 Docker 应用程序 - `alist.sh`、`gitea.sh`、`nginx-proxy-manager.sh`、`safeline.sh`、`siyuan.sh`、`typecho.sh`、`vaultwarden.sh`、`xboard.sh`:安装和配置不同 Docker 应用。
### 3. Manage系统管理 ### 3. Manage系统管理
- **作用**该分类包含与系统管理相关功能。 - **作用**:系统管理相关功能。
- **主要文件** - **主要文件**
- `install.sh`用于安装和配置系统工具。 - `install.sh`:安装和配置系统工具。
- `unInstall.sh`用于卸载系统工具和清理相关配置。 - `unInstall.sh`:卸载系统工具和清理配置。
### 4. Other其他功能 ### 4. Other其他功能
- **作用**该分类包含一些其他实用功能。 - **作用**:其他实用功能。
- **主要文件** - **主要文件**
- `bbr_open.sh`用于开启 BBR 加速。 - `bbr_open.sh`:开启 BBR 加速。
- `language.sh`用于更改系统语言设置。 - `language.sh`:更改系统语言设置。
- `reinstall.sh`用于重新安装系统工具。 - `reinstall.sh`:重新安装系统工具。
### 5. User用户管理 ### 5. User用户管理
- **作用**该分类包含与用户和权限管理相关的功能。 - **作用**:用户和权限管理功能。
- **主要文件** - **主要文件**
- `key.sh`用于管理 SSH 密钥。 - `key.sh`:管理 SSH 密钥。
- `manage.sh`提供用户管理功能,如创建、删除用户 - `manage.sh`:用户管理功能。
- `ssh.sh`用于管理和配置 SSH 服务。 - `ssh.sh`:管理和配置 SSH 服务。
- `test.sh`:检查 SSH 客户端是否安装。 - `test.sh`:检查 SSH 客户端安装。
### 6. Web网页相关功能 ### 6. Web网页相关功能
- **作用**该分类主要涉及与网页相关功能。 - **作用**:网页相关功能。
- **主要文件** - **主要文件**
- `acme`包含与 SSL 证书管理相关的脚本,如申请、管理和测试 - `acme`SSL 证书管理脚本。
- `apply.sh`用于申请 SSL 证书。 - `apply.sh`:申请 SSL 证书。
- `manage.sh`:管理已申请证书。 - `manage.sh`:管理已申请证书。
- `test.sh`:测试 SSL 证书有效性。 - `test.sh`:测试 SSL 证书有效性。
- `nginx`包含与 Nginx 配置相关脚本。 - `nginx`Nginx 配置相关脚本。
- `install.sh`用于安装 Nginx。 - `install.sh`:安装 Nginx。
- `manage.sh`:管理 Nginx 配置。 - `manage.sh`:管理 Nginx 配置。
- `test.sh`:测试 Nginx 是否正常运行。 - `test.sh`:测试 Nginx 是否正常运行。
### 7. Sources源管理 ### 7. Sources.sh源管理
- **作用**:用于管理软件源的配置。 - **作用**:管理软件源配置。
- **主要文件**
- `sources.sh`:提供查看和更换软件源的功能。
### 8. VPNVPN 管理) ### 8. VPNVPN 管理)
- **作用**:用于管理和配置 VPN 服务。 - **作用**VPN 服务的安装
- **主要文件**
- `vpn.sh`:提供 VPN 服务的安装和管理功能。
### 9. Software软件管理 ### 9. Software软件管理
- **作用**:用于安装常用软件包。 - **作用**:安装常用软件包。
- **主要文件**
-
### 菜单机制 ### 菜单机制
该系统通过菜单提供了一个用户友好的界面,允许用户选择可用脚本进行执行。菜单机制包括以下两个子功能: 该系统通过菜单提供用户友好的界面,允许用户选择可用脚本执行。菜单机制包括以下两个子功能:
#### 1. test 菜单 #### 1. test 菜单
- **功能**test 菜单用于执行特定的测试脚本,验证系统功能的正常运行。用户可以选择要测试的功能,系统会根据选择执行相应的测试脚本。 - **功能**:执行特定测试脚本,验证系统功能正常。
- **作用**:确保用户在执行其他操作之前,系统的相关功能正常,避免因环境问题导致的错误。
#### 2. menu 菜单 #### 2. menu 菜单
- **功能**menu 菜单提供了一个用户友好的界面,允许用户选择可用的脚本进行执行。用户通过输入对应的序号来选择脚本,系统会根据用户的选择执行相应的操作。 - **功能**:用户友好的界面,选择可用脚本执行。
- **作用**:作为系统的入口,用户可以通过它访问其他功能,包括执行脚本、配置定时任务等。