Mac上的个人脚本
工作以后,事情非常多,如何更好的管理自己的工作是非常重要的。本文介绍了一下Mac下自动化脚本的一些内容
Mac定时任务
工作当中,我们会遇到大量重复的工作。比如每天工作日志的创建。面对这样的问题,我们可以采用一个Mac的定时任务来解决。
mac的定时任务可以分为两种,第一种通过弹窗来提示,另外一种则直接脚本执行。其实本质都是脚本运行。 第一种通过 osascript 来执行弹窗脚本
在 osascript 中有两种提示方法,一种是通知栏弹窗可以用一下命令:
osascript -e 'display notification "通知内容" with title "标题" subtitle "子标题"'
另外一种则为弹窗的方式如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16on callmeican()
set meican_url to "http://itmp.sf-express.com/loginmgmt/frame.action?name=timemgmt&frameSize=1" as string
tell application "Google Chrome"
open location meican_url
activate
end tell
end callmeican
say "老哥有时间填个工时吧"
display dialog "快把今天的工时填一下吧(每个月25号前要填完)!" buttons {"好的", "一会在填"} default button 1
if the button returned of the result is "好的" then
-- action for 1st button goes here
callmeican()
end if
定时任务的启动有4个位置,一般放第一个位置就可以:
1
2
3
4
5~/Library/LaunchAgents 由用户自己定义的任务项(放这里,注意权限问题)
/Library/LaunchAgents 由管理员为用户定义的任务项
/Library/LaunchDaemons 由管理员定义的守护进程任务项
/System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
/System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项
进入自定义任务项以后,就可以写一个plist脚本:
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"1.0" encoding="UTF-8" xml version=
<plist version="1.0">
<dict>
<!-- Label唯一的标识 -->
<key>Label</key>
<string>wang.Backup.task.plist</string>
<!-- 指定要运行的脚本 -->
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<!-- 指定运行的脚本的命令,默认是bash -->
<string>/Users/wangyh/Desktop/Code/Shell/Task/backup.scpt</string>
</array>
<!-- 指定要运行的时间 -->
<!-- <key>StartInterval</key>
<integer>5</integer> -->
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key>
<integer>1</integer>
<key>Minute</key>
<integer>30</integer>
<key>Hour</key>
<integer>11</integer>
</dict>
<!-- 标准输出文件 -->
<key>StandardOutPath</key>
<string>/Users/wangyh/Desktop/Code/Shell/Log/food.log</string>
<!-- 标准错误输出文件,错误日志 -->
<key>StandardErrorPath</key>
<string>/Users/wangyh/Desktop/Code/Shell/Log/food.err</string>
</dict>
</plist>
<!-- Minute <integer>
The minute on which this job will be run.
Hour <integer>
The hour on which this job will be run.
Day <integer>
The day on which this job will be run.
Weekday <integer>
The weekday on which this job will be run (0 and 7 are Sunday).
Month <integer>
The month on which this job will be run. -->
<!-- ~/Library/LaunchAgents 由用户自己定义的任务项(放这里,注意权限问题)
/Library/LaunchAgents 由管理员为用户定义的任务项
/Library/LaunchDaemons 由管理员定义的守护进程任务项
/System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
/System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项
-->
<!--
# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上
$ launchctl load -w com.demo.plist
# 删除任务
$ launchctl unload -w com.demo.plist
# 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'com.demo'
# 开始任务
$ launchctl start com.demo.plist
# 结束任务
$ launchctl stop com.demo.plist -->
最后再放一个生产每日工作日志的脚本
Day
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!/bin/sh
先设置语言为中文
export LANG="zh_CN"
二
data_today=`date +%a`
2
week_day=`date +%w`
判断是否为周日
if [[ $week_day -eq 0 ]]; then
statements
week_day=7
fi
if [[ $week_day -eq 1 ]]; then
statements
`/Users/wangyh/Desktop/Code/Shell/Task/task_Weekday.sh`
fi
2018.08.28
data_info=`date +%Y.%m.%d`
28
data_daka=`date +%d`
data_shenyu=`expr 25 - $data_daka`
普通文件
kaitou="今天是"${data_info}。"\n\n每天都有一个好心情,加油!\n\n今天的主要任务是:"
markdown开头
kaitou=">今天是"${data_info}"\n>**数据备份了么!系统更新记得重新备份!!!**\n>今天打卡了么!离25号还有"${data_shenyu}天",[赶紧填工时!](http://itmp.sf-express.com/loginmgmt/frame.action?name=timemgmt&frameSize=1)\n>加油!你是最胖的!\n\n##今天的主要任务是:\n\n* [x] \n\n* [ ]"
计算当前周日期 1
to_monday=`expr $week_day - 1`
to_sunday=`expr 7 - $week_day`
monday=`/bin/date -v -${to_monday}d +%d`
sunday=`/bin/date -v +${to_sunday}d +%d`
计算月份、以周一的月份为准
Month=`/bin/date -v -${to_monday}d +%Y年%m月`
Time=`date`
folder_name=${monday}"-"$sunday
Data_name=`date +%A`
判断是否是周末
if [[ $week_day -lt 6 ]]; then
进入工作目录
cd /Users/wangyh/Desktop/SF-Resource/工作日志/$Month/$folder_name
mkdir $Data_name
echo '今天是'${Data_name}'已经创建了当天的工作目录-'$Data_name'---创建时间是:'$Time >> /Users/wangyh/Desktop/Code/Shell/Log/task_Day.log
进入当天工作目录
cd /Users/wangyh/Desktop/SF-Resource/工作日志/$Month/$folder_name/$Data_name
普通文件
touch ${data_info}"-工作日志"
echo $kaitou >> ${data_info}"-工作日志"
markdown
touch ${data_info}"-工作日志.md"
echo $kaitou >> ${data_info}"-工作日志.md"
else
echo '今天是'${data_info}'。好好休息!~~~~下周继续加班呦'$Time >> /Users/wangyh/Desktop/Code/Shell/Log/task_Day.log
fi
#创建工作日志文档(判断 月份)
if [ ! -d $Month ];then
`/Users/wangyh/Desktop/Code/Shell/Task/task_Month.sh`
#运行完成写入日志
echo '成功创建了文件夹'$Month >> /Users/wangyh/Desktop/Code/Shell/Log/task_Month.log
fi
#创建工作日志文档(判断 周)
if [ ! -d $Month ];then
`/Users/wangyh/Desktop/Code/Shell/Task/task_Month.sh`
#运行完成写入日志
echo '成功创建了文件夹'$Month >> /Users/wangyh/Desktop/Code/Shell/Log/task_Month.log
fi
cd /Users/wangyh/Desktop/SF-Resource/工作日志/$Month
#本周日志文件创建
folder_name=${Data_today}"-"$Data_Five
if [[ ! -d $folder_name ]]; then
mkdir $folder_name
echo '成功创建了文件夹'$folder_name >> /Users/wangyh/Desktop/Code/Shell/Log/task_Weekday.log
else
#输出错误日志
echo $folder_name"文件夹已经存在,创建失败" >> /Users/wangyh/Desktop/Code/Shell/Log/task_Weekday.log
fi
weak
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
#获取一周日期date -v +4d +%Y-%m-%d
export LANG="zh_CN"
week_day=`date +%w`
to_monday=`expr $week_day - 1`
to_sunday=`expr 7 - $week_day`
monday=`/bin/date -v -${to_monday}d +%d`
sunday=`/bin/date -v +${to_sunday}d +%d`
Month=`date +%Y年%m月`
Year=`date +%Y年`
Week=`date +%W周`
Time=`date`
folder_name=${monday}"-"$sunday
#工作总结撰写
zhoubaotime_today=`date +%Y.%m.%d`
zhoubaotime_five=`date -d 'friday' +%Y.%m.%d`
zhoubaoname="("${zhoubaotime_today}"~"$zhoubaotime_five")工作周报"
zhoubaomd=$zhoubaoname'.md'
mk_kaitou=">"$zhoubaoname"\n\n>"$Year"共有52周\n本周是第"$Week"\n\n##本周的主要工作为: \n\n* \n\n* \n\n-------\n\n*以下为每天的工作内容*\n\n####周一\n* [ ] \n* [ ]\n\n####周二\n* [ ] \n* [ ] \n\n####周三\n* [ ] \n* [ ]\n\n####周四\n* [ ] \n* [ ]\n\n####周五\n* [ ] \n* [ ]"
# zhoubaoname="("${zhoubaotime_today}"~"$zhoubaotime_five")工作周报"
# kaitou=$zhoubaoname"\n\n"$Year"共有52周,本周是第"$Week"。\n\n本周的主要工作为:\n\n以下为每天的工作内容:\n\n周一:\n\n周二:\n\n周三:\n\n周四:\n\n周五:"
cd /Users/wangyh/Desktop/SF-Resource/工作日志/ &&
#创建工作日志文档(判断 月份)
if [ ! -d $Month ];then
`/Users/wangyh/Desktop/Code/Shell/Task/task_Month.sh`
#运行完成写入日志
echo '成功创建了文件夹'$Month >> /Users/wangyh/Desktop/Code/Shell/Log/task_Month.log
fi
cd /Users/wangyh/Desktop/SF-Resource/工作日志/$Month
#本周文档创建
if [[ ! -d $folder_name ]]; then
mkdir $folder_name
echo '成功创建了文件夹--'$folder_name '---创建时间是:'$Time >> /Users/wangyh/Desktop/Code/Shell/Log/task_Weekday.log
cd /Users/wangyh/Desktop/SF-Resource/工作日志/$Month/$folder_name &&
touch $zhoubaomd && echo $mk_kaitou >> $zhoubaomd
echo '成功创建了周报'$zhoubaomd '---创建时间是:'$Time >> /Users/wangyh/Desktop/Code/Shell/Log/task_Weekday.log
else
#输出错误日志
echo $folder_name"文件夹已经存在,创建失败"$Time >> /Users/wangyh/Desktop/Code/Shell/Log/task_Weekday.log
fi
最后提醒大家注意一点,由于开始不知道执行脚本默认的shell解释器是什么,因此会出现指令找不到的情况。 这里给出了一些Mac脚本命令
1
2
3
4
5
cat /etc/shells
切换shell解释器
chsh -s /bin/bash