《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 语言)
官方下载demo 1:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 开发步骤 : https://pay.weix ...
- Linux.SSH.修改SSH端口号
Linux系统的默认SSH端口是22, 一般为发安全起见, 建议修改成其它端口 编辑配置文件: vi /etc/ssh/sshd_config 找到 #Port 22 把前面的#号去掉, 22修改成新 ...
- 表达式求值--Java实现
/*将中缀表达式--转化为后缀表达式--属于栈的一种应用 *具体思路: *1.扫描字符串,遇到操作数字符直接不管,存到一个字符串里边 *2.操作符优先级比较--定义了方法 * 栈中优先级高:出栈存进字 ...
- Java常用API
常用Java API 一. java.io.BufferedReader类(用于从文件中读入一段字符:所属套件:java.io) 1. 构造函数BufferedReader(java.io.FileR ...
- velocity的基础使用
velocity的基本使用要求:掌握jsp的jstl技术,因为velocity的用法和jstl非常相似.语法上差别不大,但是velocity的示例明显比jstl少,解释也少,所以使用velocity必 ...
- iOS动画学习 -隐式动画
事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.你并不需要在Core Animation中手动打开动画,但是你需要明确地关闭它,否则它会一直存在. 当你改变 ...
- Angular通信$q服务和promise对象
promise 约定(promise)是一个对象,表示在未来时间点会发生的某件事情,约定可以是三种状态之一:等待.完成或拒绝.约定将从等待状态开始,然后可以转换为完成或者拒绝状态,一旦约定完成或者被拒 ...
- JQ编写楼层效果
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- MarkDown的快速入门
简介 简单的去解释MarkDown就是html,但是将html中的元素用符号去代替使用.本文用的编译软件是Atom(神器),不多说直接上图看效果. 语法 文本 列表 区块 分割符 表格 链接 mark ...
- windows 系统下C++实现的多线程
摘抄http://blog.csdn.net/huyiyang2010/article/details/5809919 Thread.h #ifndef __THREAD_H__ #define __ ...