本文是Linux Shell脚本系列教程的第(三)篇,更多shell教程请看:Linux Shell脚本系列教程 Shell作为一种高级的脚本类语言,也是支持自定义变量的。继上一篇之后,今天就为大家介绍下Shell中的变量相关知识。 为使Shell编程更有效,系统提供了一些Shell变量。Shell变量可以保存诸如路径名、文件名或者一个数字这样的变量名。 Shell将其中任何设置都看做文本字符串。有两种变量,本地和环境。严格地说可以有 4种,但其余两种是只读的,可以认为是特殊变量,它用于向Shell脚本传递参数。 定义变量 定义变量时,变量名不加美元符号($),如:…
Shell脚本: 判断http链接是否有效, 批量检测网址URL是否有效
在* NIX下,您可以使用curl发出一个简单的HEAD请求(HEAD只请求头,而不是页体):
curl --head http://ikeepstudying.com
然后,您可以只获取第一行,其中包含HTTP状态代码(200 OK,404 Not Found等):
curl -s --head http://ikeepstudying.com | head -n 1
然后检查您是否获得了体面的回复(状态代码为200或3 **):
curl -s --head http://ikeepstudying.com | head -n 1 | grep "HTTP/1.[01] [23].."
如果状态代码正常,这将输出第一行,如果没有,则输出第一行。你也可以管道到/ dev / null获得没有输出,并使用$?以确定其是否工作或否:
curl -s --head http://ikeepstudying.com | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null # on success (page exists), $? will be 0; on failure (page does not exist or # is unreachable), $? will be 1
EDIT -s只是告诉curl不显示“进度条”。
实例一:批量检测网址是否有效的Shell脚本
这是一个用来批量检测网址是否有效的Shell脚本,在Linux平台下运行。
使用方法:
1、把需要检测的网址放在一个文件名为:url.txt的文本文件中,一行一个网址;
2、把url.txt放在/root目录下
3、把脚本checkurl.sh也放在/root目录下
4、给checkurl.sh添加执行权限
5、#./checkurl.sh 运行 checkurl.sh
6、检测结果保存在 check-result.txt文件中
checkurl.sh
fileurl='/root/url.txt' for chkurl in $(cat ${fileurl}) # ${}忽略空格 do # -o 输出内容到/dev/null; -s 静默方式 ;-w 定义显示输出格式;"%{http_code}" 在最后被检索的 HTTP(S) 页中被找到的数字的代码 HTTP_CODE=`curl -o /dev/null -s --head -w "%{http_code}" "${chkurl}"` if [ ${HTTP_CODE} -ne 200 ] then echo -e "error-${HTTP_CODE}:" $chkurl >>check-result.txt else echo -e ${HTTP_CODE}: $chkurl >>check-result.txt fi done
url.txt
http://www.ikeepstudying.com http://v.ikeepstudying.com http://justcode.ikeepstudying.com http://me.ikeepstudying.org http://tools.ikeepstudying.com http://services.ikeepstudying.com
实例二:批量检测网址是否有效的Shell脚本
#!/bin/bash source /etc/init.d/functions ##下面的函数实现的是友好型提示,即如果命令输入错误, ##将会提示此命令的正确用法 function usage(){ echo "usage:$0: url" exit 1 } ##函数实现Url检测,如果正常返回url is ok!否则返回 url is bad function check_url(){ wget --spider -q -o /dev/null --tries=1 -T 5 $1 if [ $? -eq 0 ] then action "$1 is ok !" /bin/true else action "$1 is bad !" /bin/false fi } #将函数接入方法入口 function main(){ if [ $# -eq 0 ] then usage fi check_url $1 }
#调用执行Main方法 main $*
上面需要注意的是,此脚本是以传参的形式进行url检测,如果需要以自己手动交互式输入的方法实现URL检测,那么只需要将传参的代码改为read -p 的方式即可以。
几个重要参数说明
$# 返回传入命令的参数个数
$1返回传入的第一个参数
$2返回传入的第二个参数
$*返回传入的所有参数
action 系统自带的功能实现,true为OK ,false为failed
实例三:添加超时
curlit() { # 下面的15是连接超时时间,若访问localhost的HTTP服务超过15s仍然没有正确响应200头代码,则判断为无法访问。 curl --connect-timeout 15 --max-time 20 --head --silent "$URL" | grep '200' }
用法:
if ! curlit; then // do something fi
更多参看:Linux: 智能监测自动重启Apache服务器的Shell脚本, 监控apache2, 监控web服务器
本文:Shell脚本: 判断http链接是否有效, 批量检测网址URL是否有效