LinuxShell编程-脑洞实验-脚本小程序
程序目录
【项目名称】Shell编程-脑洞实验-脚本小程序
【背景技术】
1/每天给自己发一句鸡汤名言
这个算是看sed,wget的工具使用想到的,然后查了一些获取网页的方法,与免费的api。
2/定位天气(实时)
看到了一篇博客
https://blog.****.net/guwuchangtian/article/details/76458605#commentBox
觉得可以试试,因为是从api中获取json文本。然后通过分割json文本来显示需要的信息。但是存在几个问题
①http://www.weather.com.cn/data/sk/101270106.html这个是一个已经不更新的api,而且其json文本结构十分简单所以才可以用文章中的sed字符定位,不适合日常生活
②如上图所示,信息量实在是太少了。而且已经停止更新了
文章的代码与结果:
#my first shell script
#edit by lixiang in 2017-7-31
echo '-----------------------------------------------'
echo "|||||hello,user!"
echo "|||||today is" `date`
json=`curl -s http://www.weather.com.cn/data/sk/101270106.html`
#echo $json
city=`echo $json | sed 's/.*city":"//g'| sed 's/","cityid.*$//g'`
temp=`echo $json | sed 's/.*temp":"//g'| sed 's/","WD.*$//g'`
wd=`echo $json | sed 's/.*WD":"//g'| sed 's/","WS.*$//g'`
ws=`echo $json | sed 's/.*WS":"//g'| sed 's/","SD.*$//g'`
echo '|||||you are now at '$city','$temp'℃,'$ws$wd'.'
echo '-----------------------------------------------'
3/天气预报
其灵感来源是这篇文章和我自己找到的免费api
https://www.sojson.com/blog/305.html
其中101190101是南京的城市id
这是一个比较复杂的json文本如果你用在线分割器是这样:(部分)
4/垃圾邮件
这个灵感来源于和同学(多特球迷)在德甲最后一轮的争执,作为拜仁球迷当然要小小报复一下,那什么让他崩溃呢,那当然是给他发各种有意思的拜仁加油口号。网上各种的发邮件文章,都不行,因为腾讯的发送端服务器ssmtp端口号是465不是25,所以例如这样的文章,都是在瞎扯。。。
5/艺术集(好玩的小程序)
源自知乎文章,想要尝试一些有意思的脚本
https://zhuanlan.zhihu.com/p/51904179
【项目目的】
1/每天给自己发一句鸡汤名言
- 实现获取网页并用字符分割来获取需要的字符段并记录。方便以后写作
- 发送给自己,让自己每天读一句英文鸡汤,让自己开心一点。有一种交互感。
2/定位天气(实时)
- 实现天气的实时更新,让天气及时一些
- 实现高效划分json文本,让各种信息便于阅读,加入小贴士,更有人情味
3/天气预报
- 实现天气预报的更新,信息涵盖范围广
- 实现高效划分json文本,让各种信息便于阅读,加入小贴士,更有人情味
- 用最少的代码去分割json文本,提高处理速度
4/垃圾邮件
- 不能频率太快,防止被禁言
- 要不同的话去骚扰别人,达到让多特球迷咬牙切齿的程度
- 定时发送,让他一脸懵。
5/艺术集(好玩的小程序)
- 看看别人的小程序,学习编程技巧
- 娱乐自我,快乐学习
【技术解决方案】
1/每天给自己发一句鸡汤名言
- check_url=$(wget -nv --spider $quote_url 2>&1)
保存输出结果(wget),将URL状态消息保存在了check_url
- if [[ $check_url == *error404* ]]
判断是否获取成功
- wget -o quote.log -O Duote.html $quote_url
将网页信息保存在 quote.log里
- sed 's/<[^>]*//g' Duote.html|
去除HTML标签
- grep "$(date +%B' '%-d,' '%Y)" -A2|
使用当前日期作为搜索关键词
- sed 's/>//g'|
删除多余的”>"
- sed '/ /{n ; d}' |
只保留一条鸡汤句子
- gawk 'BEGIN{FS=" "} {print $1}'|
删除 
- 分开编辑11.sh,1.sh,quote.log,daily_quote.txt,1.txt模块化处理,每个文本有自己的功能。
2/定位天气(实时)
- 一定要装jq !apt install jq
- 按照语法进行分割:
https://www.ibm.com/developerworks/cn/linux/1612_chengg_jq/index.html
3/天气预报
- 同上
- 循环,因为在获取预报的第几天,json文本是一个数组所以应用int类型的循环,来确定json数组。所以用for (( i = 1; i < 15; i++))来进行循环。例如:high=`jq .data.forecast[$i].high json.txt`
- Rm json.txt 删除json是问了每次更新都可以精准定位。同时也节省空间资源
4/垃圾邮件
- 分开编辑4.sh,4.txt,slogan.txt模块化处理,每个文本有自己的功能。
- 配置邮箱授权码,路径等等。参考:
https://askubuntu.com/questions/12917/how-to-send-mail-from-the-command-line
- head -n +$i slogan.txt| tail -1 >> 4.txt
因为我的slogan是一行一行不一样的,所以每次发邮件内容是第i行的内容,加入到4.txt里方便后面无需输入模板
- ssmtp 目的@163.com < 4.txt
这样无需多输入模板:
To: 目的@163.com
From: 发送@qq.com
Subject: hey my friend
- sed -i '$d' 4.txt
删除4.txt最后一行的内容,这样下次的发送内容不会和上一次重复。
5/艺术集(好玩的小程序)
安装与配置即可。
【具体实施】
1/每天给自己发一句鸡汤名言
- 配置环境:yum -y install wget
- vim 1.sh(写截取网页并提取名言的第一个sh文件)
#!/bin/bash
#
quote_url=http://www.quotationspage.com/qotd.html
check_url=$(wget -nv --spider $quote_url 2>&1)
if [[ $check_url == *error404* ]]
then
echo "Bad web address"
echo "cannot link"
echo "exiting ..."
exit
fi
wget -o quote.log -O Duote.html $quote_url
grep "$(date +%B' '%-d,' '%Y)" -A2|
sed 's/>//g'|
sed '/ /{n ; d}' |
gawk 'BEGIN{FS=" "} {print $1}'|
tee daily_quote.txt > /dev/null
tail -n 2 daily_quote.txt
exit
- 保存后敲如bash 1.sh
效果图:
- 下面发送给目标人:
创建1.txt(预写好邮件格式)
To:目的@163.com
From: 发送方@qq.com
Subject: weather
- 创建11.sh(最终执行文件)
vim 11.sh
tail -n2 daily_quote.txt >> 1.txt
ssmtp 目的@163.com < 1.txt
- 最后, bash 11.sh
2/ 定位天气(实时)
- 配置环境:apt install jq
- 写sh文件
vim 2.sh
#!/bin/bash
#天气更新+tips
echo '-----------------------------------------------'
echo " hello,user "
echo "today is" `date`
curl -s http://t.weather.sojson.com/api/weather/city/101190101>>json.txt
city=`jq .cityInfo.city json.txt`
update=`jq .cityInfo.updateTime json.txt`
temp=`jq .data.wendu json.txt`
shidu=`jq .data.shidu json.txt`
pm25=`jq .data.pm25 json.txt`
pm10=`jq .data.pm10 json.txt`
quality=`jq .data.quality json.txt`
tips=`jq .data.ganmao json.txt`
echo '你现在在'$city ","'我们的天气更新时间 :'$update
echo '现在温度是:'$temp '湿度是' $shidu
echo 'pm2.5是:'$pm25 ',' 'pm10是:' $pm10 ',' '空气质量是:' $quality
echo '温馨小贴士: '$tips
rm json.txt
exit
- 敲入 sh 2.sh
由于api是每三小时刷新一次,所以另一天是不同的:
3/天气预报
- 配置环境:同上
- 写sh文件
vim 3.sh
#!/bin/bash
#天气更新+tips
touch json.txt
echo '-----------------------------------------------'
echo " hello,user "
echo "*****天气预报*****"
curl -s http://t.weather.sojson.com/api/weather/city/101190101>>json.txt
for (( i = 1; i < 15; i++))
do
high=`jq .data.forecast[$i].high json.txt`
low=`jq .data.forecast[$i].low json.txt`
ymd=`jq .data.forecast[$i].ymd json.txt`
fx=`jq .data.forecast[$i].fx json.txt`
f1=`jq .data.forecast[$i].fl json.txt`
type=`jq .data.forecast[$i].type json.txt`
notice=`jq .data.forecast[$i].notice json.txt`
echo '预告日期:'$ymd
echo '最高温度:'$high '最低温度:' $low
echo '风:'$fx ',' '级数是:' $f1 ',' '天气:' $type
done
rm json.txt
exit
- 敲入:bash 3.sh
这个也是不断在更新的:
4/垃圾邮件
- 首先是大量标语(你想轰炸的语句):
vim slogan.txt
就得到了:
- 邮件发送功能配置:
sudo apt-get install ssmtp
gksu gedit /etc/ssmtp/ssmtp.conf
- 配置:ssmtp.conf
vim /etc/ssmtp/ssmtp.conf
root=发送方@qq.com
mailhub=smtp.qq.com:465
rewriteDomain=qq.com
hostname=发送方@qq.com
AuthUser=发送方@qq.com
AuthPass=csnahzyjwluvbdej
FromLineOverride=YES
UseTLS=YES
- 样本(格式)4.txt
To: 接收方@163.com
From: 发送方@qq.com
Subject: hey myfriend
- 然后写一个脚本:4.sh
for (( i = 1; i < 7; i++))
do
sleep 1m
head -n +$i slogan.txt| tail -1 >> 4.txt
ssmtp 接收方@163.com < 4.txt
sed -i '$d' 4.txt
done
- 于是,bash 4.sh我们就可以轰炸多特球迷了(这里是测试)
5/艺术集(好玩的小程序)
至于好玩的艺术集请看最前面的知乎链接!