Linux shell脚本实战技术
一、shell介绍
- shell是一个命令解释器,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户。
它是用C语言编写的程序,它是用户使用Linux的桥梁,同时,shell也可以作为一门强大的编程语言,我们常说的shell是命令行解释器的意思,也有内核上的一层壳的含义。 - shell常见的几种类型有sh、csh、bash、zsh等提供的脚本支持。bash是Linux标准默认的shell,是BourneAgain Shell的缩写;因为bash有很多特性,比如:可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。
- Shell诞生于 Unix,是与 Unix/Linux 交互的脚本编程,单独地学习 Shell 是没有意义的,有Linux基础的同学应该知道,Linux都默认集成了shell环境;自动通过查找匹配的方式给出以某字符串开头的命令,包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。
- shell的功能点在于外部命令的使用。其内部数据处理方面,侧重文本(或者说字符串,或字符流)处理,而对运算和其他基本数据结构的原生较弱(例如常用的array、set、map等等)。它的功能目标在于实现命令自动化。但是呢,实现命令自动化的同时,Shell需要依赖其他程序才能完成大部分的工作,这是它的缺陷也是一个优点吧,但它不容置疑的长处是:简洁的脚本语言标记方式,而且比C语言编写的程序执行更快、更有效率。所以我们如果有做运维甚至是基础管理Linux服务器的同学,只要学会了shell编程,大大的可以节约我们的时间,更快捷的管理我们的服务器了。
- 在Linux系统中我们经常看见以:#!/bin/bash开头的文件内容,这就是声明了该文件是一个基于bash的shell编程文件。
二、shell实例代码
简单的两条命令
#!/bin/bash
cd /home/liwei/mongodb/bin
./mongod --dbpath=../liwei_db
依次操作的目的是:进入mongodb/bin目录,接着执行启动mongodb数据,保存为m.sh,这样,只要我们在Linux终端执行一条:sh m.sh,回车,计算就会依次执行指令,达到启动mongodb数据库的功能。
【MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。】那么要执行更多的指令,可以么?回答肯定是可以,如果我们需要执行上百行指令,单独执行的话,我们要重复操作,那么把它们依次写入一个shell,这样来执行的时候就可以很方便了,执行shell的过程中,我们可以通过>或者>>来记录下一些节点的结果报告。
#!/bin/bash/
cd /lamp
ls *.tar.gz > ls.list
for TAR incat ls.list
do
tar -zxf $TAR
done
这个shell要解决的实际问题是将lamp目录里面所有的压缩包,批量解压出来,这样我们可以看出ls的结果集可以拿出来参与下一个指令的执行。那么我们现在有个需求就是将某个文件夹下所有的文件名字里的大写字母改成小写字母,如果要人工一个个改的话,但是找文件就够眼花蛋疼了,这个时候shell就发挥了强大的力量了。
#!/bin/bash
for file inls | grep '[A-Z]'
do
str=echo $file|tr 'A-Z' 'a-z'
mv $file $str
这样就很好的解决了一个复杂的操作for filename in `ls` do if test -d $filename then b=0 else a=$(ls -l $filename | awk '{ print $5 }') if test $a -eq 0 then rm $filename fi fi done
有时候我们在管理文件的时候需要将空文件,没用的文件全删掉,这样我们就很好的解决了
针对于shell脚本编程还有很多实用的地方,大家慢慢挖掘吧,如果是在运维管理方面同样Python也是个很好的选择。