Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《Linux命令行与shell脚本编程大全》第二十六章 一些有意思的脚本

《Linux命令行与shell脚本编程大全》第二十六章 一些有意思的脚本

作者头像
xcywt
发布于 2018-01-11 10:09:39
发布于 2018-01-11 10:09:39
8440
举报
文章被收录于专栏:xcywtxcywt

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)发送消息

代码如下:

代码语言:js
AI代码解释
复制
 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 创建脚本

代码语言:js
AI代码解释
复制
 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 '/&nbsp;/{n ; d}' |
 gawk 'BEGIN{FS="&nbsp;"} {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卡,就不研究了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《Linux命令行与shell脚本编程大全》第二十二章 gawk进阶
gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据。  22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 gawk程序使用内建变量来引用程序数据里的一些特殊功能 1.字段和记录分隔符变量 数据字段变量:允许你使用美元符和字段在该记录中的位置值来引用记录对应的字段。 要引用第一个字段就用变量$1,第二个就用$2,….以此类推。 数据字段是由分隔符来划定的。默认字段分隔符是一个空白字符,也就是空格或者制表符。 有一组内建
xcywt
2018/01/11
8360
《Linux命令行与shell脚本编程大全》第二十章 正则表达式
20.1 什么是正则表达式 20.1.1 定义 正则表达式是你所定义的模式模板。linux工具可以用它来过滤文本。 正则表达式利用通配符来描述数据流中第一个或多个字符。 正则表达式模式含有文本或特殊字符,为sed编辑器和gawk程序定义了一个匹配数据时采用的模板。 20.1.2 正则表达式的类型 使用正则表达式最大的问题在于有不止一种类型的正则表达式。 正则表达式是通过正则表达式引擎实现的,正则表达式引擎是一套底层软件,负责解释正则表达式模式并使用这些模式进行文本匹配。 在linux中有两种流行的正则表达式
xcywt
2018/01/11
1.3K0
《Linux命令行与shell脚本编程大全》23章24章
第二十三章 使用其他shell bash shell是linux发行版中最广泛使用的shell。但是它并不是唯一的选择,还有其他的shell可以供你选择。 23.1 什么是dash shell 百度百科上说:Dash shell是一个Unix shell,比Bash shell小的多,符合POSIX标准。 下面是书上的: dash shell是作为debian linux发行版的一部分开发的,主要出现在Ubuntu linux发行版中。它是Bourne shell的精简版。所以它并不像bashshell一样
xcywt
2018/01/12
1.1K0
《Linux命令行与shell脚本编程大全》第二十五章 创建与数据库、web及电子邮件相关的脚本
25.1 MySQL数据库 /* 但是我在虚拟机上安装的时候居然不提示输入密码。 这个可以参考http://blog.csdn.net/sinat_21302587/article/details/7
xcywt
2018/01/12
9600
《Linux命令行与shell脚本编程大全》第二十五章 创建与数据库、web及电子邮件相关的脚本
《Linux命令行与shell脚本编程大全》第二十一章 sed进阶
本章介绍一些sed编辑器提供的高级特性。 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的。 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理一行数据。 有时会需要对跨多行的数据执行特定操作。 比如,在数据中查找一个长的短语Linux system Administrators Group.如果这个短语出现在两行当中,之前的知识就不够用了。 解决方案,sed编辑器包含了三个可用来处理多行文本的特殊命令: N:将数据流中的下一行加进来创建一个多行组(m
xcywt
2018/01/11
1.8K0
《Linux命令行与shell脚本编程大全》第二十一章 sed进阶
《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk
这两个工具能够极大简化需要进行的数据处理任务。 19.1 文本处理 能轻松实现自动格式化、插入、修改或删除文本元素的简单命令行编辑。 sed和gawk就具备上述功能 19.1.1 sed编辑器 被称为流编辑器。 流编辑器会在编辑器处理数据之前预先提供的一组规则来编辑数据流。 sed根据命令来处理数据流中的数据。命令可以从命令行输入,也可以存储在一个命令文本文件中。 sed编辑器会执行下列操作: 1)一次从输入中读取一行数据 2)根据所提供的编辑命令匹配数据 3)按照命令修改流中的数据 4)将新的数据输出到S
xcywt
2018/01/11
2.1K0
《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk
《Linux命令行与shell脚本编程大全》第十一章 构建基本脚本
11.1使用多个命令 $date;who   //  命令列表,加入分号就可以,这样会依次执行。参见5.2.1节 注意区分$(date;who),这个是进程列表,会生成一个子shell来执行 Shell脚本的关键在于输入多个命令并处理每个命令的结果,甚至需要将一个命令的结果传给另外一个命令。 Shell可以让你将多个命令串起来,一次性完成。 上面的date;who可以写入一个文件,这样就不用在命令行敲命令了,运行这个文本文件就好了。 11.2 创建shell脚本文件 第一行必须这样:指定要使用的shell
xcywt
2018/01/11
1.9K0
《Linux命令行与shell脚本编程大全》第十一章 构建基本脚本
shell脚本编程之路3
描述:Bash(Bourne Again shell)也跟其他编程语言一样也支持函数,一般在编写大型脚本中需要用到,函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高,像其他编程语言一样,Shell 也支持函数。但是bash作为一种解释性语言,bash 在编程能力方面提供的支持并不像其他编译性的语言(例如 C 语言)那样完善,执行效率也会低很多。
全栈工程师修炼指南
2022/09/28
3.4K0
shell脚本编程之路3
Linux运维常用shell脚本之网络管理实例
    HTTP_CODE=(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" 
菲宇
2022/12/21
3.2K0
Linux 【Shell脚本经典案例】
===============Talk is cheap, show me the code,bye-bye================
IT茂茂
2020/09/17
3.4K0
Linux 【Shell脚本经典案例】
《Linux命令行与shell脚本编程大全》第十六章 控制脚本
一些控制脚本的方式:向脚本发送信号、修改脚本优先级,在脚本运行时切换到运行模式  16.1 处理信号 linux利用信号与运行在系统中的进程进行通信。 也可以通过对脚本进行编程,使其在收到特定信号时执行某些命令。从而控制脚本的操作。 16.1.1 重温Linux信号 比如下面这些常见的: 信号   值         描述 1    SIGUP     挂起进程  2    SIGINT     终止进程  3    SIGOUT    停止进程  9    SIGKILL    无条件终止进程 15   
xcywt
2018/01/11
3.3K0
《Linux命令行与shell脚本编程大全》第十六章 控制脚本
《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令
许多程序要就对shell脚本中的命令施加一些逻辑控制流程。 结构化命令允许你改变程序执行的顺序。不一定是依次进行的 12.1 使用if-then语句 如下格式: if command then          commands fi if语句会允许if后面的那个命令,如果该命令的退出码的0(代表成功了)位于then部分的命令就会被执行。否则不执行。 例子: #!/bin/bash # if then test if pwd  then echo “pwd success” fi # thi
xcywt
2018/01/11
1K0
《Linux命令行与shell脚本编程大全》 第六章环境变量
很多程序和脚本都通过环境变量来获取系统信息、存储临时数据和配置信息。 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息。 这项特性允许在内存中存储数据,以便程序能轻松访问到它们。 在bash shell中,分两类: 全局变量:对于shell会话和所有生成的子shell都是可见的 局部变量:只对创建的它们的shell可见 6.1.1全局环境变量 查看全局变量,  $env    $printenv 查看某个
xcywt
2018/01/11
1.1K0
《Linux命令行与shell脚本编程大全》 第六章环境变量
《Linux命令行与shell脚本编程大全》 第四章
4.1 监测程序 1. ps  默认只显示运行在当前控制台下的属于当前用户的进程。  可以接很多选项,比如 -A表示所有进程  -e等。 2. ps -l  查看进程更多信息 UID:启动这些进程的用户 PID:进程的进程ID PPID:父进程的进程ID C:进程生命周期中的CPU利用率 TTY:进程启动时的终端设备 TIME:运行进程需要的累计CPU时间 CMD:启动的程序名称 PRI:进程的优先级(数字越大代表越低的优先级) ADDR:进程的内存地址 F:内核分配给进程的系统标记 S:进程的状态(O正在
xcywt
2018/01/11
1.1K0
《Linux命令行与shell脚本编程大全》 第四章
《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程
18.1 创建文本菜单 直接上例子吧:   1 #!/bin/bash   2 function menu   3 {   4         clear   5         echo   6         echo -e "\t\t\tSys Admin Menu\n"   7         echo -e "\t1. Display disk space"   8         echo -e "\t2. Display logged usage"   9         e
xcywt
2018/01/11
1.4K0
《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程
2018-11-22 10 个实战及面试常用 Shell 脚本编写
注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格;多加注释说明。 3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。 5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。 6)写脚本一定先测试再到生产上。
Albert陈凯
2018/12/14
4330
Linux命令行与shell脚本编程大全(基础介绍)
1、介绍,用法,实用 2、/etc/inittab 运行级别 systemctl set-default TARGET.target 3、桌面环境:x window,kde,gnome 4、ls -F //区分目录和文件的输出 ls -F -R ps l ps -o stat,cmd,pid 5、排序 sort 按字符 sort -n 按数字大小 sort -k3 sort -r 反转 sort -t ":" -k 3 -n /etc/passwd 指定分隔符后的排序 6、grep grep -n 带行号 grep -c//只统计有几行是符合的 grep -e a -e b //多个匹配,or 7、echo
用户5760343
2022/05/18
7860
Linux命令行与shell脚本编程大全(基础介绍)
《Linux命令行与shell脚本编程大全》第十四章 处理用户输入
有时还会需要脚本能够与使用者交互。bash shell提供了一些不同的方法来从用户处获得数据, 包括命令行参数,命令行选项,以及直接从键盘读取输入的能力。 14.1 命令行参数 就是添加在命令后的数据 比如: ./addem  10  30 10  和  30 就是传递的命令行参数 14.1.1 读取参数 bash shell会将一些称为位置参数的特殊变量分配给输入到命令行中的所有参数。 比如: $0:程序名   $1:第一个参数   $2:第2个参数 …… 以此类推直到第九个参数。 每个参数都必须用空格分
xcywt
2018/01/11
1.9K0
《Linux命令行与shell脚本编程大全》第十四章 处理用户输入
《Linux命令行与shell脚本编程大全》第十三章 更多的结构化命令
本章讨论bash shell的循环命令for、while和until 13.1 for命令 重复执行一系列命令在编程中很常见。 bash shell提供了for命令,允许你创建一个遍历一系列值的循环。每次迭代都使用其中一个值来执行已定义好的一组命令。下面是基本格式 for var in list do command done 在list参数中需要提供迭代中要用到的一系列值。会依次迭代下去。每次迭代中,var会包含列表中要用到的一系列值。 do 和 done直接输入的命令可以是一条或多条标准的bash sh
xcywt
2018/01/11
1.9K0
《Linux命令行与shell脚本编程大全》第十三章 更多的结构化命令
Shell脚本编程_shell简单脚本
  shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,在用户和内核之间充当翻译官的角色,是一个命令解释器。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 shell。
全栈程序员站长
2022/11/09
8.3K0
Shell脚本编程_shell简单脚本
推荐阅读
相关推荐
《Linux命令行与shell脚本编程大全》第二十二章 gawk进阶
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档