ubuntu中实现定时弹窗的提醒脚本
<p><span><strong>简单的弹窗效果</strong></span></p>
<p>
首先是上网查了ubuntu中的弹窗命令,发现<code>notify-send</code>这个命令就能满足要求了</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_634430">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">notify-send [</code><code class="bash string">"该休息一下啦"</code><code class="bash plain">] </code><code class="bash string">"喝水!伸懒腰!动一动!"</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
弹窗效果</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="ubuntu中实现定时弹窗的提醒脚本" alt="ubuntu中实现定时弹窗的提醒脚本" src="https://zhuji.jb51.net/uploads/img/202305/20e1c8615fde1e49f45db47b8b971b4a.jpg"></p>
<p>
弹窗效果有了,然后应该是一个定时弹窗的功能</p>
<p>
<span><strong>一、cron命令实现定时弹窗</strong></span></p>
<p>
想到的是<code>cron</code>命令,google了很多教程,都没有成功</p>
<p>
在/etc/crontab 中加入了</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_522386">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">* * * * * root notify-send [</code><code class="bash string">"该休息一下啦"</code><code class="bash plain">] </code><code class="bash string">"喝水!伸懒腰!动一动!"</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
也用命令编辑了</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_565127">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">crontab</code> <code class="bash plain">-e</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
同时也启动了cron服务</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_511203">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">server </code><code class="bash functions">cron</code> <code class="bash plain">start</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
还是没有成功</p>
<p>
终于在一个介绍crontab用法的博客终于找到我的crontab脚本不执行的原因了:<span><strong>没有设置环境变量!</strong></span></p>
<p>
在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量</p>
<p>
<strong>crontab脚本</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_696067">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">home=/</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">shell=</code><code class="bash plain">/bin/bash</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">0 * * * * notify-send [</code><code class="bash string">"该休息一下啦"</code><code class="bash plain">] </code><code class="bash string">"喝水!伸懒腰!动一动!"</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
这样就实现了</p>
<p>
<span><strong>二、shell脚本无限循环实现</strong></span></p>
<p>
下面是脚本:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_816200">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash keyword">while</code> <code class="bash plain">:</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash keyword">do</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash spaces"> </code><code class="bash functions">sleep</code> <code class="bash plain">3600</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash spaces"> </code><code class="bash functions">echo</code> <code class="bash functions">time</code> <code class="bash plain">past</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash spaces"> </code><code class="bash plain">notify-send [</code><code class="bash string">"该休息一下啦"</code><code class="bash plain">] </code><code class="bash string">"喝水!伸懒腰!动一动!"</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash keyword">done</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
把这个脚本加入到home目录的<code>.bashrc</code>中,每次登陆就能启动了</p>
<p>
<span><strong>三、利用zenity和notify-send实现</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_804496">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash preprocessor bold">#!/bin/bash</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">alarttime=100</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash keyword">while</code> <code class="bash plain">(($alarttime))</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash keyword">do</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash keyword">if</code> <code class="bash plain">(($alarttime != 100)) </code><code class="bash comments"># 如果不是 100,则说明不是初次运行,则弹出下面的提示</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash keyword">then</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">notify-send $alarttime</code><code class="bash string">"分钟已到,请重新设定!"</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">zenity --info --text </code><code class="bash string">"时间到,请重新设定!"</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash keyword">fi</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash plain">alarttime=$(zenity --entry --title </code><code class="bash string">"定时提醒"</code> <code class="bash plain">--text </code><code class="bash string">"输入提醒时间(分钟, 将忽略小数)"</code><code class="bash plain">)</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash plain">alarttime=${alarttime%.*} </code><code class="bash comments"># 忽略输入的小数点后面的数字,如 4.6 识别为 4</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash keyword">if</code> <code class="bash plain">(($alarttime > 60)) </code><code class="bash comments"># 不能超过最大值</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash keyword">then</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash plain">zenity --info --text </code><code class="bash string">"必须小于60分钟,退出"</code>
</div>
<div class="line number15 index14 alt2">
<code class="bash keyword">break</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash keyword">fi</code>
</div>
<div class="line number17 index16 alt2">
<code class="bash plain">notify-send </code><code class="bash string">"成功设定"</code><code class="bash plain">$alarttime</code><code class="bash string">"分钟,开始计时"</code>
</div>
<div class="line number18 index17 alt1">
<code class="bash functions">sleep</code> <code class="bash plain">$((alarttime*60))</code>
</div>
<div class="line number19 index18 alt2">
<code class="bash keyword">done</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
上面的脚本,使用了 <code>notify-send</code> 命令用于在桌面上弹出气泡提示,使用了 zenity 命令用于显示图形窗口。<br>
自己用的话,上面的脚本可以写得更简单一点,因为错误检测没必要做。但是如果要给不太懂的人用的话,我这脚本里的错误检测及处理则会就显得有点力不从心了。</p>
<p>
<span><strong>总结</strong></span></p>
<p>
好了,终于完成了ubuntu中弹窗提醒脚本了,本文提供三种方法供大家参考借鉴,不知道大家都学会了没有,希望这篇文章的内容对大家能有所帮助,如果有疑问大家可以留言交流。</p>
頁:
[1]