LinuxShell编程-脑洞实验-脚本小程序

程序目录

1/每天给自己发一句鸡汤名言. 1

2/ 定位天气(实时). 2

3/天气预报. 3

4/垃圾邮件. 4

5/艺术集(好玩的小程序). 7

【项目名称】Shell编程-脑洞实验-脚本小程序

【背景技术】

1/每天给自己发一句鸡汤名言

这个算是看sed,wget的工具使用想到的,然后查了一些获取网页的方法,与免费的api。

2/定位天气(实时)

看到了一篇博客

https://blog.csdn.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 '-----------------------------------------------'

LinuxShell编程-脑洞实验-脚本小程序_第1张图片

3/天气预报

其灵感来源是这篇文章和我自己找到的免费api

https://www.sojson.com/blog/305.html

其中101190101是南京的城市id

LinuxShell编程-脑洞实验-脚本小程序_第2张图片

这是一个比较复杂的json文本如果你用在线分割器是这样:(部分)

LinuxShell编程-脑洞实验-脚本小程序_第3张图片

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

                sed 's/<[^>]*//g' Duote.html|

                        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

LinuxShell编程-脑洞实验-脚本小程序_第4张图片

  • 保存后敲如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

LinuxShell编程-脑洞实验-脚本小程序_第5张图片

  • 敲入 sh 2.sh
  • LinuxShell编程-脑洞实验-脚本小程序_第6张图片

由于api是每三小时刷新一次,所以另一天是不同的:

LinuxShell编程-脑洞实验-脚本小程序_第7张图片

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

LinuxShell编程-脑洞实验-脚本小程序_第8张图片

  • 敲入:bash 3.sh
  • LinuxShell编程-脑洞实验-脚本小程序_第9张图片

这个也是不断在更新的:

LinuxShell编程-脑洞实验-脚本小程序_第10张图片

4/垃圾邮件

  • 首先是大量标语(你想轰炸的语句):

vim slogan.txt

就得到了:
LinuxShell编程-脑洞实验-脚本小程序_第11张图片

  • 邮件发送功能配置:

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=密匙

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/艺术集(好玩的小程序)

至于好玩的艺术集请看最前面的知乎链接!

你可能感兴趣的:(Linux,shell编程,脚本小程序)