Update ocixjj.sh

This commit is contained in:
振振君子 authored and GitHub committed 2026-09-13 00:59:46 +08:00
1 parent d678504b40
commit 362775923e
1 file changed
+120
+120
View File
@@ -496,6 +496,121 @@ cmd_check() {
echo " 磁盘: $(incus config device get "$NAME" root size 2>/dev/null || echo '未设置(不限)')"
}
# ================= 交互式菜单 =================
# 列出当前已记录的小鸡名称,方便菜单里选择时参考
menu_list_names() {
if [ -f "$LOG_FILE" ] && [ "$(wc -l < "$LOG_FILE")" -gt 1 ]; then
echo "当前小鸡列表:"
awk -F'\t' 'NR>1{print " - "$1" (SSH端口:"$3")"}' "$LOG_FILE"
else
echo "(当前还没有任何小鸡记录)"
fi
}
# 按任意键返回菜单
menu_pause() {
echo ""
read -rp "按回车键返回菜单..." _
}
# 包一层子shell执行,防止 cmd_* 内部的 exit 1 把整个交互菜单进程带崩掉
# (脚本顶部开了 set -e,子shell失败只会让这条 if 判断为假,不会终止父进程)
menu_run() {
if ( "$@" ); then
:
else
echo ""
echo "!! 操作未完成(输入有误或执行中出错),已返回菜单"
fi
}
menu_do_create() {
read -rp "创建几台? [默认1]: " count
count=${count:-1}
read -rp "CPU百分比,如 5% [默认${DEFAULT_CPU}]: " cpu
cpu=${cpu:-$DEFAULT_CPU}
read -rp "内存,如 128MiB [默认${DEFAULT_MEM}]: " mem
mem=${mem:-$DEFAULT_MEM}
read -rp "磁盘,如 512MiB [默认${DEFAULT_DISK}]: " disk
disk=${disk:-$DEFAULT_DISK}
menu_run cmd_create "$count" "$cpu" "$mem" "$disk"
}
menu_do_resize() {
menu_list_names
echo ""
read -rp "输入要调整的小鸡名称: " name
[ -z "$name" ] && { echo "名称不能为空"; return; }
read -rp "新CPU百分比(留空不改): " cpu
read -rp "新内存(留空不改): " mem
read -rp "新磁盘(留空不改): " disk
menu_run cmd_resize "$name" "$cpu" "$mem" "$disk"
}
menu_do_delete() {
menu_list_names
echo ""
read -rp "输入要删除的小鸡名称: " name
[ -z "$name" ] && { echo "名称不能为空"; return; }
read -rp "!! 确认删除 [$name] ? 此操作不可恢复,输入 yes 确认: " confirm
if [ "$confirm" = "yes" ]; then
menu_run cmd_delete "$name"
else
echo "已取消,未做任何改动"
fi
}
menu_do_check() {
menu_list_names
echo ""
read -rp "输入要自检的小鸡名称: " name
[ -z "$name" ] && { echo "名称不能为空"; return; }
menu_run cmd_check "$name"
}
cmd_menu() {
while true; do
clear
echo "================================================"
echo " chicken.sh 交互菜单"
echo "================================================"
local total
total=$(incus list -c n --format csv 2>/dev/null | grep -c "^${NAME_PREFIX}" || echo 0)
echo " 当前小鸡数量: ${total}"
if incus image list -c l --format csv 2>/dev/null | grep -qx "$CUSTOM_IMAGE"; then
echo " 自定义基础镜像: 已构建 [$CUSTOM_IMAGE]"
else
echo " 自定义基础镜像: 未构建(create会用原始镜像现装,较慢)"
fi
echo "------------------------------------------------"
echo " 1) 初始化环境 (init)"
echo " 2) 构建加速基础镜像 (build-image)"
echo " 3) 删除基础镜像 (delete-image)"
echo " 4) 批量创建小鸡 (create)"
echo " 5) 查看所有小鸡 (list)"
echo " 6) 调整某台资源限制 (resize)"
echo " 7) 删除某台小鸡 (delete)"
echo " 8) 自检某台小鸡SSH (check)"
echo " 0) 退出"
echo "------------------------------------------------"
read -rp "请选择操作 [0-8]: " choice
echo ""
case "$choice" in
1) menu_run cmd_init; menu_pause ;;
2) menu_run cmd_build_image; menu_pause ;;
3) menu_run cmd_delete_image; menu_pause ;;
4) menu_do_create; menu_pause ;;
5) menu_run cmd_list; menu_pause ;;
6) menu_do_resize; menu_pause ;;
7) menu_do_delete; menu_pause ;;
8) menu_do_check; menu_pause ;;
0) echo "已退出"; exit 0 ;;
*) echo "无效选择,请输入 0-8 之间的数字"; sleep 1 ;;
esac
done
}
# ================= 主入口 =================
require_root
@@ -524,8 +639,13 @@ case "$1" in
check)
cmd_check "$2"
;;
menu|"")
cmd_menu
;;
*)
echo "用法:"
echo " sudo ./chicken.sh 不带任何参数 = 进入交互菜单,数字选操作,不用记命令"
echo " sudo ./chicken.sh menu 同上,显式进入交互菜单"
echo " sudo ./chicken.sh init 初始化环境(装Incus+自动init+放开防火墙,只需跑一次)"
echo " sudo ./chicken.sh build-image 构建自定义基础镜像(预装sshd),建议先跑一次以加速批量创建"
echo " sudo ./chicken.sh delete-image 删除自定义基础镜像,退回用原始镜像现装sshd"