《Linux命令行与shell脚本编程大全》第二十六章 一些有意思的脚本
26.1 发送消息
26.1.1 功能分析
1.确定系统中都有谁
$who
给出的信息包括用户名 用户所在终端 用户登入系统的时间
2.启用消息功能
用户可以禁止别人给我发消息,所以需要先检查一下是否允许发送消息。
$mesg
结果是is n说明消息发送被关闭了。 is y 表示允许发送消息
还可以查看别人的消息状态,
$who –T
用户名后面的-表示用户的消息功能已经关闭。+表示已经启用
要接受消息可以使用mesg 的y选项,这样消息功能就启用了。
$mesg y
3.向其他用户发送消息
消息功能启用以后,就可以使用write命令通过用户名和当前终端向其发消息
用who查看:给xiaochongyong pts/19发送消息

$write xiaochongyong pts/19 #这样就是发送消息
我开了两个终端,一个是pts/17 一个是19。下面是19接收到的

注意:接收方接到消息后经常需要按回车来重新获得命令行提示符
26.1.2 创建脚本
有几个步骤
1)先检查用户是否登录
2)检查用户是否能接收消息
3)检查是否包含要发送的消息
4)发送消息
代码如下:
xcy@xcy-virtual-machine:~/shell/26zhang$ cat mu.sh
#!/bin/bash
muser=$1
logged_on=$(who | grep -i -m 1 $muser | gawk '{print $1}')
#1) determine if user is logged
if [ -z $logged_on ]
then
echo "$muser is not logged on"
echo "Exiting script......"
exit
fi
#2) determine if user allows messages
allowed=$(who -T | grep -i -m 1 $muser | gawk '{print $2}')
if [ $allowed != "+" ]
then
echo "$muser does not allowing messageing."
echo "Exiting script......"
exit
fi
# 3) check message
if [ -z $2 ]
then
echo "No message parameter included"
echo "Exiting script......"
exit
fi
shift
while [ -n "$1" ]
do
whole_message=$whole_message' '$1
shift
done
# 4) Send message to user
uterminal=$(who | grep -i -m 1 $muser | gawk '{print $2}')
echo $whole_message | write $logged_on $uterminal
exit
运行结果:

可以看到右下角的提醒:

26.2 获取格言
26.2.1 功能分析
在指定的网址上提取一行格言,励志的话。
1.学习wget
wget能够将web页面下载到本地linux系统中。
功能十分丰富,这里只介绍一点点。
如何使用,使用wget命令和网站地址就行了
$wget www.baidu.com
会将网站的信息存储在与web页面同名的文件中。这里是保存在了index.html
还可以通过-o选项指定将会话输出保存在日志文件中
$wget –o baidu.log www.baidu.com
还可以用-O,控制web页面信息保存的位置。可以自己指定文件名,
$wget –o baidu.log –O baidu.html www.baidu.com
2.测试web地址
有写wed地址会变化。所以需要测试地址的有效性。
使用 –spider选项
$wget –spider www.baidu.com
还可以加上-nv选项,精简输出信息
$wget –spider –nv www.baidu.com
这里可以测试一个无效的地址
$wget –spider –nv www.xiaochongyong.com
26.2.2 创建脚本
xcy@xcy-virtual-machine:~/shell/26zhang$ cat quota.sh
#!/bin/bash
quote_url=www.quotationspage.com/qotd.html
#quote_url=www.baidu.com
check_url=$(wget -nv --spider $quote_url 2>&1)
if [[ $check_url == *error404* ]]
then
echo "Bad web address"
echo "$quote_url invalid"
echo "Exiting script ..."
exit
fi
#wget -o /tmp/quote.log -O /tmp/quote.html $quote_url
wget -o quote.log -O quote.html $quote_url
sed 's/<[^>]*//g' quote.html | #去除<>
#grep "$(date +%B' '%-d,' '%Y)" -A2 | #匹配格言中当前日期的右边。-A2选项提取出另外 两行文本
grep "28, $(date +%Y)" -A2 | # xcy add
sed 's/>//g' | # 删除>
sed '/ /{n ; d}' |
gawk 'BEGIN{FS=" "} {print $1}' |
tee daily_quote.txt > /dev/null #保存文件
exit
xcy@xcy-virtual-machine:~/shell/26zhang$ ./quota.sh
xcy@xcy-virtual-machine:~/shell/26zhang$ cat daily_quote.txt
Selected from Michael Moncur's Collection of Quotations - November 28, 2017
Perpetual devotion to what a man calls his business, is only to be sustained by perpetual neglect of many other things. Robert Louis Stevenson (1850 - 1894)
xcy@xcy-virtual-machine:~/shell/26zhang$
注意这个:#grep "$(date +%B' '%-d,' '%Y)" -A2 |
由于我的乌班图是中文的,一直都搜不到November。我就把它换成了这个,只匹配28, 2017
grep "28, $(date +%Y)" -A2 | # xcy add
本来想这样的grep "$(date +%-d,’ ’%Y)" -A2 | # xcy add,不知道为啥我的日期是29。而网站上的是28.可能跟是美国的网站有关系。
26.3 编造借口
curl工具允许你从特定的Web服务器中接收数据。还可以用它发送数据。
这里测试需要美国的SMS卡,就不研究了。
《Linux命令行与shell脚本编程大全》第二十六章 一些有意思的脚本的更多相关文章
- 《Linux命令行与shell脚本编程大全》 第六章环境变量
很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...
- Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]
此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M)
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---56
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---55
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---54
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
随机推荐
- PHP设计模式三:原型设计模式
一.什么是原型设计模式 原型设计模式使用一种克隆技术来复制实例化的对象,新对象是通过复制原型实例创建的.原型设计模式的目的是通过使用克隆以减少 实例化对象的开销. 在原型设计模式中,Client类是不 ...
- 已安装Fedora的U盘无法格式化,要求reinitialize layout
错误提示:This partition cannot be modified because it contains a partition table; >please reinitializ ...
- CodeForces - 556B Case of Fake Numbers
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- KiKi's K-Number
KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- AngularJS学习篇(十五)
AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 创建模块 你可以通过 AngularJS 的 angular. ...
- mongodb集群【】
参考 http://www.jianshu.com/p/2825a66d6aed http://www.cnblogs.com/huangxincheng/archive/2012/03/07/238 ...
- undefined 与void 0
参考:https://segmentfault.com/a/1190000000474941 Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值.void 操作符用法 ...
- Linux 新建文件/文件夹,删除文件文件夹,查找文件 打开文件
1.新建文件夹:mkdir xx 2.新建文件: touch 1.py 3.删除文件/文件夹: rm -r xx rm 1.py 4.打开文件:cat 1.py 只显示前几行 :head -2 1. ...
- DataProtection Key的选择
代码位于: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver.cs private IKey FindDefau ...
- NOIP2017衢二中旅游记Day 1
NOIP前一天下午早早的去了衢州: 车程大概在4个半小时左右: 车上大家都一脸颓废,并混杂着动听的音乐: 到了衢州二中,立刻跑去吃晚饭: 吃饭的队伍特别长,吃面的却空无一人: 我毅然决然地选择了去吃面 ...