shell小记

很久没写shell,今天要写个监控脚本,还是shell来得快,于是捡起来。

需求非常简单,对于htdocs目录,递归地遍历每个子目录,并对其中每一个php文件进行代码语法检查,以保证系统健康。

1、shell函数

非常简单,用不用function这个关键字声明无所谓,函数名后有没有括号也无所谓,但还是加上好了,便于别人阅读

与其他语言不同,函数名后不必跟参数列表,调用时和命令行调用一下,直接函数名后面写就OK

function check() {
 if [ $# -eq 1 ]; then
 echo $1
 fi
}
 
check aaa

2、shell的控制语句

1)shell的比较,字符串间的比较用=,整数间的比较用-eq,这个-不可少哦,否则报语法错误,还有就是字符串比较时虽然用“=”,但这个“=”号两边必须要有空格,否则就变成赋值语句了,即if里的条件返回值永远会是真, 这个鼓捣了半天,汗。。。

正确写法:

if [ "$RES" != "No“ ]

2)if后的[和],两边都要有空格,吃过这个亏,所以这次没犯

3)for lf in /file/*,查看/file目录下所有文件,也曾想用for lf in ·ls /file·,但这样返回的只是文件名,而我需要的是全路径加文件名

3、shell的字符串操作

想要一个判断,即文件名是否.php结尾,因文件名是现成的,所以优先选择字符串截取,有几种方式

1)${varname:offset:len},例:

varname="abc"

echo ${varname:1:2}   //bc

但我想从后往前截的,于是看网上说可将offset置为负数,试了一下echo ${varname:-1} ,返回的是"abc",看来不符合需求

2)${varname##*string},例

varname="abc.php"

echo ${varname##*.}   // php,符合需求了。

类似的还有${varname#*string} ${varname%%*string} ${varname%*string} 有兴趣用到时可看下

3)if [[ $F == *.php ]] ,这个最简单直接了,判断$F是否是以.php结尾,但要注意这里双”[“”]“哦

4、调试

加上-n参数,检查语法错误,加上-x参数,可以看到程序执行时的每条命令,还是非常好的!不然echo死人了!




发布了30 篇原创文章 · 获赞 3 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章