-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmac_init.sh
232 lines (204 loc) · 7.46 KB
/
mac_init.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
#!/bin/zsh
# Mac初试化脚本
# 在线执行
# This script should be run via curl:
# zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Sowevo/my_script/main/shell/mac/mac_init.sh)"
# zsh -c "$(curl -fsSL https://jsd.eagleyao.com/gh/Sowevo/my_script@main/shell/mac/mac_init.sh)"
get_device_info() {
# 获取设备名称和序列号
device_name=$(system_profiler SPHardwareDataType | awk -F ": " '/Model Name/ {print $2}')
serial_number=$(system_profiler SPHardwareDataType | awk '/Serial Number/ {print $4}')
# 去除设备名称和序列号中的空格和特殊字符
device_name_clean=$(echo "$device_name" | tr -d '[:space:]' | tr -d '[:punct:]')
serial_number_clean=$(echo "$serial_number" | tr -d '[:space:]' | tr -d '[:punct:]')
# 检查设备名称和序列号是否为空
if [ -z "$device_name_clean" ] || [ -z "$serial_number_clean" ]; then
# 返回"Unknown"表示无法获取设备信息
echo "Unknown"
else
# 拼接设备名称和序列号
result="${device_name_clean}_${serial_number_clean}"
# 返回拼接结果
echo "$result"
fi
}
# 0.初始化用到的变量
# 系统名称
CURRENT_DATE=$(date +"%Y%m%d")
OS="$(uname)"
# 获取硬件信息 判断inter还是苹果M
UNAME_MACHINE="$(uname -m)"
# 类似于MacBookAir_SDKJAKJKJSA的设别名称
DEVICE_INFO=$(get_device_info)
#Mac
if [[ "$UNAME_MACHINE" == "arm64" ]]; then
#M1
HOMEBREW_PREFIX="/opt/homebrew"
else
#Inter
HOMEBREW_PREFIX="/usr/local"
fi
# 自动安装brew的软件列表
RECOMMEND_APPS=(
git mas maven telnet unar vim wget zsh ffmpeg android-platform-tools
google-chrome iina jetbrains-toolbox keka openinterminal-lite qlvideo utools
)
#判断下mac os终端是Bash还是zsh
case "$SHELL" in
*/bash*)
if [[ -r "$HOME/.bash_profile" ]]; then
SHELL_PROFILE="${HOME}/.bash_profile"
else
SHELL_PROFILE="${HOME}/.profile"
fi
;;
*/zsh*)
SHELL_PROFILE="${HOME}/.zprofile"
;;
*)
SHELL_PROFILE="${HOME}/.profile"
;;
esac
echo "您的设备标识是[$DEVICE_INFO]"
# 1.获取sudo权限
sudo -v -p "请输入开机密码,输入过程不显示,输入完后回车:"
# 更新sudo不过期,直到脚本完成
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
# 2.判断系统版本
if [[ "$OS" != "Darwin" ]]; then
echo "此脚本只能运行在 Mac OS"
exit 0
fi
echo -e "开始执行\n"
# 2.1. 禁用在网络存储和U盘中.DS_Store灯文件的生成
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true
# 3.判断Git是否安装,没安装的话喊用户安装...
git --version > /dev/null 2>&1
if [ $? -ne 0 ];then
sudo rm -rf "/Library/Developer/CommandLineTools/"
echo -e "Git未安装!请安装后再运行此脚本\n在系统弹窗中点击“安装”按钮"
echo -e "如果没有弹窗的老系统,需要自己下载安装\nhttps://sourceforge.net/projects/git-osx-installer/"
xcode-select --install > /dev/null 2>&1
exit 0
fi
# 4.判断rosetta是否安装
if [[ "$UNAME_MACHINE" == "arm64" ]]; then
HAS_ROSETTA=$(/usr/bin/pgrep -q oahd && echo Y || echo N)
if [[ "$HAS_ROSETTA" == "N" ]]; then
echo -e "开始安装rosetta!"
echo -e "\n\n==================================="
softwareupdate --install-rosetta --agree-to-license
echo -e "===================================\n\n"
echo -e "rosetta安装完成"
fi
fi
# 5.判断brew是否安装,没安装的话喊用户安装
source ${SHELL_PROFILE} 2>/dev/null # 可能刚装的,source一下试试
brew --version > /dev/null 2>&1
if [ $? -ne 0 ];then
echo -e "brew未安装!请安装后再运行此脚本"
echo -e "1、手动安装(推荐)\n2、自动安装\n"
echo -e "请输入序号:"
read MY_DOWN_NUM
case $MY_DOWN_NUM in
2)
echo -e "开始安装brew!"
echo -e "\n\n==================================="
git config --global --add safe.directory /opt/homebrew/Library/Taps/homebrew/homebrew-core
git config --global --add safe.directory /opt/homebrew/Library/Taps/homebrew/homebrew-cask
git config --global --add safe.directory /opt/homebrew/Library/Taps/homebrew/homebrew-services
zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
source ${SHELL_PROFILE}
echo -e "===================================\n\n"
echo -e "brew安装完成"
;;
*)
echo -e "请执行以下脚本手动安装\n"
echo -e "/bin/zsh -c \"\$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)\"\n"
echo -e "此脚本将退出,安装完成再来执行!"
exit 0
;;
esac
fi
# 6.查看brew update 是否正常
echo -e "尝试执行brew update\n\n==================================="
brew update&&brew upgrade
echo -e "===================================\n\n"
echo -e "请检查brew update是否正常执行(Y/N)?"
read UPDATE_SUCCESS
case $UPDATE_SUCCESS in
n|N)
echo -e "brew update执行异常\n请修复后继续执行!"
exit 0
;;
esac
# 7.安装常用软件
echo -e "brew安装成功,是否安装常用软件"
echo -e "1、不安装\n2、安装推荐的软件\n3、使用brew bundle恢复软件\n"
echo -e "请输入序号:"
read BREW_INSTALL
case $BREW_INSTALL in
2)
echo -e "开始安装推荐的软件!:\n${RECOMMEND_APPS[@]}"
echo -e "\n\n==================================="
brew install "${RECOMMEND_APPS[@]}"
echo -e "===================================\n\n"
echo -e "推荐的软件安装完成!"
;;
3)
echo -e "你选择了brew bundle恢复"
echo -e "请输入Brewfile的路径(可以直接将文件拖入终端):"
read BREW_FILE
echo -e "从${BREW_FILE}恢复软件"
echo -e "\n\n==================================="
brew bundle --file="${BREW_FILE}"
echo -e "===================================\n\n"
echo -e "brew bundle恢复完成!"
;;
esac
# 8.安装Oh My Zsh
if [ -d "$ZSH" ]; then
echo "恭喜!Oh My Zsh 已安装。"
else
echo -e "是否安装 Oh My Zsh"
echo -e "1、不安装\n2、安装\n"
echo -e "请输入序号:"
read OH_MY_ZSH_INSTALL
case $OH_MY_ZSH_INSTALL in
2)
echo -e "开始安装 Oh My Zsh!"
echo -e "\n\n==================================="
export RUNZSH=no
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
echo -e "===================================\n\n"
echo -e "Oh My Zsh 安装完成!"
;;
*)
echo -e "选择不安装 Oh My Zsh。"
;;
esac
fi
# 9.备份软件安装列表数据到iCloud中
echo "添加定时任务以自动备份软件列表"
echo "如果有权限弹窗,请选择允许!"
# 设置变量
LIST_DIR="${HOME}/Library/Mobile Documents/com~apple~CloudDocs/MacConfig/${DEVICE_INFO}/${CURRENT_DATE}"
BREWFILE_PATH="${LIST_DIR}/Brewfile"
APPLIST_PATH="${LIST_DIR}/AppList"
# 检查并创建目录
if [ ! -d "$LIST_DIR" ]; then
echo "目录不存在,创建目录:${LIST_DIR}"
mkdir -p "$LIST_DIR"
fi
# 使用定时任务
new_task1="2 * * * * ${HOMEBREW_PREFIX}/bin/brew bundle dump --describe --force --file=\"$BREWFILE_PATH\""
new_task2="3 * * * * ls -1 /Applications > \"$APPLIST_PATH\""
# 获取现有的定时任务并追加新任务
existing_tasks=$(crontab -l 2>/dev/null) # 为了处理没有现有任务的情况,将错误输出重定向到/dev/null
# 将新的任务添加到现有任务列表中
all_tasks="${existing_tasks}"$'\n'"${new_task1}"$'\n'"${new_task2}"
# 将所有任务写回到cron表
echo "$all_tasks" | crontab -
# TODO
# mackup的使用...