最近在学习shell编程方面的内容,学习shell编程主要是为了更好的学习和掌握一些linux方面的技术。
学习shell脚本的主要目的是更加方便高效的使用linux中的各种命令,更好的完成一些基本操作。
对于一些更加复杂的操作,例如复杂的运算,操作数据库和文件等,个人觉得使用perl或者python比较好,python用的更加普及一些,不过perl和php的语法结构比较相似,学习成本比较低,所以打算近期将perl和python都看一下,做到可以读懂一些简单的代码。
今天在看《精通shell编程》这本书的时候,有一个课后题还不错,查阅了一下资料以后,写出来该shell脚本,题目内容不重要,直接分析代码中的知识点。
#!/usr/bin/bash
lspid() {
htag=false
stag=false
unset OPTIND
while getopts :hs option
do
case $option in
h)htag=true;;
s)stag=true;;
esac
done
shift $(($OPTIND-1))
if [ "$htag" = "true" ] && [ "$stag" = "true" ];then
/usr/bin/ps -ef|grep -E "$1|UID"|grep -v grep|sort -r -k 2,2
elif [ "$htag" = "true" ];then
/usr/bin/ps -ef|grep -E "$1|UID"|grep -v grep
elif [ "$stag" = "true" ];then
/usr/bin/ps -ef|grep -E "$1"|grep -v grep|sort -r -k 2,2
else
/usr/bin/ps -ef|grep -E "$1"|grep -v grep
fi
}
lspid ssh
echo
lspid -h ssh
echo
lspid -s ssh
echo
lspid -sh ssh
在函数中使用getopts
shell中的函数没有所谓的形参和实参,而是类似脚本传递参数的方式使用的。
不过要注意,函数中声明的变量默认是全局变量,所以多次调用函数时,需要取消OPTIND变量,然后由getopts产生。
判断布尔类型变量的值
shell中没有专门用于判断布尔值的方法,而是将布尔值当作字符串来判断。
# 判断变量是否设置
if [ $tag ]
# 判断变量是否为true
if [ $tag = "true"]
grep和sort命令
grep -E参数可以使用更加复杂的正则表达式进行字符串匹配,-v参数用于排除操作。
sort 默认使用第一列,升序排列
sort -r 使用降序排列
sort -k m,n 指定依据从m到n列进行排列
参考资料:
http://www.2cto.com/os/201303/195609.html