《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版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
随机推荐
- 【Telerik控件学习】-建立自己的图形编辑工具(Diagram)
Telerik提供了RadDiagram控件,用于图形元素的旋转,拖拽和缩放.更重要的是,它还拓展了许多绑定的命令(复制,剪切,粘贴,回退等等). 我们可以用来组织自己的图形编辑工具. Step1.定 ...
- LNK4098: 默认库“MSVCRT”与其他库的使用冲突
LNK4098: 默认库"MSVCRT"与其他库的使用冲突 修改的方法:在项目属性中,在连接器-输入选项中,在忽略特定库中添加相应的库,具体添加那些苦请参照下面的表格. 下面的内容 ...
- 2015上海赛区B Binary Tree
B - Binary Tree Description The Old Frog King lives on the root of an infinite tree. According to ...
- 原生promise
你应该会用事件加回调的办法来处理这类情况: var img1 = document.querySelector('.img-1'); img1.addEventListener('load', f ...
- ②bootstrap栅栏使用基础案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Problem A: 求平均年龄
Description 定义一个Persons类,用于保存若干个人的姓名(string类型)和年龄(int类型),定义其方法 void addAPerson(string,int) 用于添加1个人的信 ...
- linux数据库备份脚本
数据库备份1.创建个备份存储目录mkdir /root/backup/2.以下内容写到dbbackup.sh(注意,使用VIM 或者VI命令新建文件,不要在WINDOWS下新建,否则可能提示 No s ...
- asp.net后台发送HTTP请求
一.文件流方式(转自:http://blog.csdn.net/u011511086/article/details/53216330) /// 发送请求 /// </summary> / ...
- python3 selenium模拟登陆斗鱼提取数据保存数据库
# coding=utf-8from selenium import webdriverimport jsonimport timeimport pymongo class Douyu: def __ ...
- 二、VueJs 填坑日记之基础项目构建
在上一篇文章中,大致介绍了一下本系列博文以及学习vuejs我们需要了解的一些概念,希望大家认真阅读,所谓知己知彼,百战百胜,学习也一样,工欲善其事,必先利其器,要想学好vuejs,那前提的概念一定要熟 ...