#!/usr/bin/zsh # 将终端的输出重置为默认设置,并且不会换行(用于重置终端的字体颜色、背景色和文本样式等设置) echo -e "\e[0m\c" export PATH=/usr/sbin:$PATH # 让apt包管理器处于非交互模式运行 export DEBIAN_FRONTEND=noninteractive # 加载系统配置 source /etc/os-release # 脚本在执行过程中遇到任何非零返回码的命令时立即退出 set -e ############################################################################### # 全局变量 # ############################################################################### readonly 安装_通用_包=('wget' 'curl' 'git' 'vim') readonly CPU_架构="$(uname -m)" readonly 系统_类型="$(uname -s)" readonly 系统_版本="$(uname -r)" # ID_LIKE不为空,则输出ID_LIKE的值,否则输出ID的值 readonly 系统_发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}")) readonly 系统_发行版_名称=$(echo "${NAME}") # 龙架构区分新旧世界的标志位 世界_类型="新世界" ############################################################################### # 终端配色 # ############################################################################### # 色彩配置 readonly 色彩重置='\e[0m' readonly 色彩=( '\e[38;5;154m' # 0: 亮绿 '\e[1m' # 1: 白 '\e[90m' # 2: 灰 '\e[91m' # 3: 红 '\e[32m' # 4: 绿 '\e[33m' # 5: 黄 ) # 用于规范输出的工具 # 位置参数 1 -> 整数 <- 1: 成功(亮绿); 2: 失败(红色); 3: 信息(绿色); 4: 通知(黄色) # 位置参数 2 -> 字符 <- 在命令行输出的字符串 # 实例 `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"` 输出() { if (($1 == 0)); then echo -e "${色彩[2]}[${色彩重置}${色彩[0]} 成功 ${色彩重置}${色彩[2]}]${色彩重置} $2" elif (($1 == 1)); then echo -e "${色彩[2]}[${色彩重置}${色彩[3]} 失败 ${色彩重置}${色彩[2]}]${色彩重置} $2" exit 1 elif (($1 == 2)); then echo -e "${色彩[2]}[${色彩重置}${色彩[4]} 信息 ${色彩重置}${色彩[2]}]${色彩重置} $2" elif (($1 == 3)); then echo -e "${色彩[2]}[${色彩重置}${色彩[5]} 通知 ${色彩重置}${色彩[2]}]${色彩重置} $2" fi } # 灰色信息(处理一些无关紧要的信息, 调用后在没有清除颜色之前会一直使用灰色输出) 色彩_灰色() { echo -e "${色彩[2]}\c" } # 清除颜色(一般和灰色信息连用) 色彩_清除() { echo -e "${色彩重置}\c" } ############################################################################### # 函数/方法 # ############################################################################### 检查_架构() { case ${CPU_架构} in *x86_64*) 主机_架构="amd64" ;; *loong*) 主机_架构="龙" ;; *) 输出 1 "暂不支持${色彩[3]} ${CPU_架构} ${色彩重置}架构" exit 1 ;; esac 输出 2 "检测到${色彩[5]} ${主机_架构} ${色彩重置}架构" } 检查_发行版() { 未知=0 case ${系统_发行版} in # *arch*) ;; *Loongnix*);; *openwrt*) 输出 1 "暂不支持openwrt" exit 1 ;; *) 未知=1 ;; esac 输出 2 "检测到 ${系统_发行版_名称} (${系统_发行版}) 系统" if [[ ${未知} == 1 ]]; then 输出 3 "此发行版尚未被验证,是否继续尝试安装(请谨慎安装)" select 是否 in "[是] Yes" "[否] No"; do case ${是否} in [yY][eE][sS] | [yY] | [是]) 输出 2 "发行版检查已忽略" break ;; [nN][oO] | [nN] | [否]) 输出 1 "已退出安装" exit 1 ;; esac done < /dev/tty # < /dev/tty 用于从终端读取输入信息 fi } 输出_主机配置(){ echo " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* * 欢迎使用 寻觅 配置脚本 * *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* " 输出 2 "主机信息检测模块启动" 检查_架构 检查_发行版 输出 0 "主机信息检测完毕" } ############################################################################### # 入口(main) # ############################################################################### 输出_主机配置