-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlaov3.0.sh
369 lines (311 loc) · 11.2 KB
/
laov3.0.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
#!/usr/bin/bash
set -e
UNAME_M="$(uname -m)"
readonly UNAME_M
UNAME_U="$(uname -s)"
readonly UNAME_U
# COLORS
readonly COLOUR_RESET='\e[0m'
readonly aCOLOUR=(
'\e[38;5;154m' # 绿色 - 用于行、项目符号和分隔符 0
'\e[1m' # 粗体白色 - 用于主要描述
'\e[90m' # 灰色 - 用于版权信息
'\e[91m' # 红色 - 用于更新通知警告
'\e[33m' # 黄色 - 用于强调
'\e[34m' # 蓝色
'\e[35m' # 品红
'\e[36m' # 青色
'\e[37m' # 浅灰色
'\e[92m' # 浅绿色9
'\e[93m' # 浅黄色
'\e[94m' # 浅蓝色
'\e[95m' # 浅品红
'\e[96m' # 浅青色
'\e[97m' # 白色
'\e[40m' # 背景黑色
'\e[41m' # 背景红色
'\e[42m' # 背景绿色
'\e[43m' # 背景黄色
'\e[44m' # 背景蓝色19
'\e[45m' # 背景品红
'\e[46m' # 背景青色21
'\e[47m' # 背景浅灰色
)
readonly GREEN_LINE=" ${aCOLOUR[0]}─────────────────────────────────────────────────────$COLOUR_RESET"
readonly GREEN_BULLET=" ${aCOLOUR[0]}-$COLOUR_RESET"
readonly GREEN_SEPARATOR="${aCOLOUR[0]}:$COLOUR_RESET"
Show() {
# OK
if (($1 == 0)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} OK $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
# FAILED
elif (($1 == 1)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[3]}FAILED$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
exit 1
# INFO
elif (($1 == 2)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} INFO $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
# NOTICE
elif (($1 == 3)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[4]}NOTICE$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
fi
}
Warn() {
echo -e "${aCOLOUR[3]}$1$COLOUR_RESET"
}
GreyStart() {
echo -e "${aCOLOUR[2]}\c"
}
ColorReset() {
echo -e "$COLOUR_RESET\c"
}
# 定义红色文本
RED='\033[0;31m'
# 无颜色
NC='\033[0m'
GREEN='\033[0;32m'
YELLOW="\e[33m"
declare -a menu_options
declare -A commands
menu_options=(
"显示本机全部ntfs格式硬盘"
"手动挂载单个分区"
"列出全部磁盘及其分区信息"
"查看单个分区信息"
"手动编辑/etc/fstab文件"
"手动编辑SMB共享文件夹"
"测试全部挂载分区"
"系统升级后重建共享"
"手动编辑定时启动文件/etc/crontab"
"1分钟后关闭屏幕"
)
commands=(
["显示本机全部ntfs格式硬盘"]="display_all_ntfs"
["手动挂载单个分区"]="mount_disk_partitions"
["列出全部磁盘及其分区信息"]="display_disk_info"
["查看单个分区信息"]="view_disk_info"
["手动编辑/etc/fstab文件"]="view_fstab_file"
["手动编辑SMB共享文件夹"]="edit_smb_conf"
["测试全部挂载分区"]="test_disk_mount"
["系统升级后重建共享"]="rebuild_share"
["手动编辑定时启动文件/etc/crontab"]="edit_crontab"
["1分钟后关闭屏幕"]="off_display"
)
#手动编辑定时启动文件/etc/crontab
edit_crontab() {
sudo nano /etc/crontab
}
#系统升级后重建共享
rebuild_share() {
smb_conf="include = /etc/samba/users/laorenshen.share.conf"
if ! grep -qs "${smb_conf}" /etc/samba/smb.conf; then
echo "${smb_conf}" | sudo tee -a /etc/samba/smb.conf
echo "SMB共享信息已写入 /etc/samba/smb.conf。"
else
echo "SMB共享信息已存在于 /etc/samba/smb.conf。"
fi
}
#显示本机全部ntfs格式硬盘
display_all_ntfs() {
# 使用lsblk命令获取磁盘信息
# lsblk_output=$(lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT)
# 使用grep命令筛选出FSTYPE为ntfs的行
# ntfs_disks=$(echo "$lsblk_output" | grep "ntfs")
# 打印磁盘名称
# echo "$ntfs_disks" | awk '{print $1}'
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep "ntfs"
}
#1分钟后关闭屏幕
off_display() {
sudo setterm -blank 1
}
#手动编辑SMB共享文件夹
edit_smb_conf() {
sudo nano /etc/samba/users/laorenshen.share.conf
}
# 手动编辑/etc/fstab文件
view_fstab_file() {
sudo nano /etc/fstab
}
# 查看单个分区信息
view_disk_info() {
# 提示用户输入要格式化的分区名称
read -p "请输入要查看的磁盘分区(例如:sda1 或 /dev/sdb1): " PARTITION
# 如果用户输入的不是以 /dev/ 开头,则加上 /dev/
if [[ "$PARTITION" != /dev/* ]]; then
PARTITION="/dev/$PARTITION"
fi
disk_info=$(sudo blkid "${PARTITION}")
echo "${disk_info}"
}
# 测试全部挂载分区
test_disk_mount() {
echo "测试挂载..."
sudo mount -a
echo "测试完成"
}
# 手动挂载单个分区
mount_disk_partitions() {
# 列出所有磁盘及其分区信息
echo "当前系统中的磁盘和分区信息:"
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
# 提示用户输入要格式化的分区名称
read -p "请输入要挂载的磁盘分区(例如:sda1 或 /dev/sdb1): " PARTITION
# 如果用户输入的不是以 /dev/ 开头,则加上 /dev/
if [[ "$PARTITION" != /dev/* ]]; then
PARTITION="/dev/$PARTITION"
fi
# 获取分区的基本名称
# BASENAME=$(basename "$PARTITION")
# 检查用户输入的分区是否存在
#if lsblk | grep -q "^${BASENAME}"; then
if blkid | grep -q "^${PARTITION}"; then
# 确认操作
read -p "您确定要挂载这块硬盘 ${PARTITION} 吗? (y/n): " CONFIRM
if [ "$CONFIRM" != "y" ]; then
echo "操作已取消。"
exit 1
fi
# 提示用户输入挂载点目录
read -p "请输入要挂载的目录名字(例如:ST240G): " MOUNT_DIR
# 创建挂载点目录
MOUNT_POINT="/media/laorenshen/${MOUNT_DIR}"
# 检查挂载点目录是否存在,如果不存在则创建
if [ ! -d "$MOUNT_POINT" ]; then
echo "创建挂载点目录 ${MOUNT_POINT} ..."
sudo mkdir -p "$MOUNT_POINT"
fi
# 卸载分区(如果已挂载)
if mount | grep -q "^${PARTITION} "; then
echo "正在卸载 ${PARTITION} ..."
sudo umount "${PARTITION}"
fi
# 挂载分区
echo "正在挂载 ${PARTITION} 到 ${MOUNT_POINT} ..."
sudo mount "${PARTITION}" "$MOUNT_POINT"
# 确认挂载成功
if mount | grep -q "^${PARTITION} "; then
echo "${PARTITION} 已成功挂载到 ${MOUNT_POINT}。"
# 写入 /etc/fstab 以便系统重启后自动挂载
read -p "您确定要写入/etc/fstab以便系统重启后自动挂载 ${PARTITION} 吗? (y/n): " CONFIRM
if [ "$CONFIRM" == "y" ]; then
echo "正在将挂载信息写入 /etc/fstab ..."
UUID=$(sudo blkid -s UUID -o value "${PARTITION}")
FILE_TYPE=$(sudo blkid -s TYPE -o value "${PARTITION}")
FSTAB_ENTRY="UUID=${UUID} ${MOUNT_POINT} ${FILE_TYPE} defaults 0 0"
if ! grep -qs "${FSTAB_ENTRY}" /etc/fstab; then
echo "${FSTAB_ENTRY}" | sudo tee -a /etc/fstab
echo "挂载信息已写入 /etc/fstab。"
else
echo "挂载信息已存在于 /etc/fstab。"
fi
echo "测试挂载..."
sudo mount -a
fi
# 生成共享文件夹配置
read -p "您确定要SMB共享这个硬盘分区 ${MOUNT_DIR} 吗? (y/n): " CONFIRM
if [ "$CONFIRM" == "y" ]; then
smb_conf="include = /etc/samba/users/laorenshen.share.conf"
#sudo nano /etc/samba/smb.conf
#include = /etc/samba/users/%Y.timas.conf
#/etc/samba/users/laorenshen.share.conf
if ! grep -qs "${smb_conf}" /etc/samba/smb.conf; then
echo "${smb_conf}" | sudo tee -a /etc/samba/smb.conf
echo "SMB共享信息已写入 /etc/samba/smb.conf。"
else
echo "SMB共享信息已存在于 /etc/samba/smb.conf。"
fi
# 检查/etc/samba/users/laorenshen.share.conf是否存在
# 如果不存在,就创建一个新的配置文件
#CONFIG_FILE="/etc/samba/users/laorenshen.share.conf"
# if [ ! -e "/etc/samba/users/laorenshen.share.conf" ]; then
# echo "文件不存在,现在创建新的配置文件"
# 以下是一个示例的配置文件内容
# 检查是否已经有ST2T这个smb共享,如果没有,则添加新的共享
if ! grep -q "${MOUNT_DIR}" /etc/samba/users/laorenshen.share.conf; then
echo "[${MOUNT_DIR}]" >> /etc/samba/users/laorenshen.share.conf
echo " path = /media/laorenshen/${MOUNT_DIR}" >> /etc/samba/users/laorenshen.share.conf
echo " browsable = yes" >> /etc/samba/users/laorenshen.share.conf
echo " available = yes" >> /etc/samba/users/laorenshen.share.conf
echo " writeable = yes" >> /etc/samba/users/laorenshen.share.conf
echo " hide special files = yes" >> /etc/samba/users/laorenshen.share.conf
echo " hide unreadable = yes" >> /etc/samba/users/laorenshen.share.conf
echo " comment = System default shared folder" >> /etc/samba/users/laorenshen.share.conf
fi
echo "ok"
# else
# echo "文件已存在,不需要创建"
# fi
fi
else
echo "挂载失败。"
fi
else
echo "错误:未找到指定的分区 ${PARTITION}。"
exit 1
fi
}
# 列出全部磁盘及其分区信息
display_disk_info() {
echo "当前系统中的磁盘和分区信息:"
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT -P
}
show_menu() {
clear
YELLOW="\e[33m"
NO_COLOR="\e[0m"
echo -e "${GREEN_LINE}"
echo '
*********** laorenshen NAS 工具箱v3.0 ***************
适配系统: 飞牛os fnOS 0.8.29
开源地址: https://github.com/laorenshen/fnos_nas_tool
'
echo -e "${GREEN_LINE}"
echo "请选择操作:"
# 特殊处理的项数组
special_items=("设置虚拟机开机自启动(headless)" "VirtualBox硬盘直通" "创建root身份的VirtualBox图标" "刷新虚拟硬盘的UUID")
for i in "${!menu_options[@]}"; do
if [[ " ${special_items[*]} " =~ " ${menu_options[i]} " ]]; then
# 如果当前项在特殊处理项数组中,使用特殊颜色
echo -e "$((i + 1)). ${aCOLOUR[7]}${menu_options[i]}${NO_COLOR}"
else
# 否则,使用普通格式
echo "$((i + 1)). ${menu_options[i]}"
fi
done
}
handle_choice() {
local choice=$1
# 检查输入是否为空
if [[ -z $choice ]]; then
echo -e "${RED}输入不能为空,请重新选择。${NC}"
return
fi
# 检查输入是否为数字
if ! [[ $choice =~ ^[0-9]+$ ]]; then
echo -e "${RED}请输入有效数字!${NC}"
return
fi
# 检查数字是否在有效范围内
if [[ $choice -lt 1 ]] || [[ $choice -gt ${#menu_options[@]} ]]; then
echo -e "${RED}选项超出范围!${NC}"
echo -e "${YELLOW}请输入 1 到 ${#menu_options[@]} 之间的数字。${NC}"
return
fi
# 执行命令
if [ -z "${commands[${menu_options[$choice - 1]}]}" ]; then
echo -e "${RED}无效选项,请重新选择。${NC}"
return
fi
"${commands[${menu_options[$choice - 1]}]}"
}
while true; do
show_menu
read -p "请输入选项的序号(输入q退出): " choice
if [[ $choice == 'q' ]]; then
break
fi
handle_choice $choice
echo "按任意键继续..."
read -n 1 # 等待用户按键
done