Linux shell 脚本分享

Shell 是一个命令解释器, 处于内核和用户之间, 负责把用户的指令传递给内核并且把执行结果回显给用户, Shell 它是一个用 C 语言编写的程序, 它是用户使用 Linux 的桥梁, 同时, Shell 也可以作为一门强大的编程语言

理论

  • 我们常说的 Shell 是命令行解释器的意思,也有内核上的一层壳的含义, Shell 常见的几种类型有 shcshbashzsh 等提供的脚本支持.

  • Shell 诞生于 Unix,是与 Unix/Linux 交互的脚本编程,单独地学习 Shell 是没有意义的,有 Linux 基础的同学应该知道,Linux 都默认集成了 Shell 环境, Shell 的功能点在于外部命令的使用.

  • 其内部数据处理方面,侧重文本(或者说字符串,或字符流)处理,而对运算和其他基本数据结构的原生较弱(例如常用的 array、set、map 等等), 功能目标在于实现命令自动化.

  • 但是呢,实现命令自动化的同时,Shell 需要依赖其他程序才能完成大部分的工作,这是它的缺陷也是一个优点吧,但它不容置疑的长处是:简洁的脚本语言标记方式,而且比 C 语言编写的程序执行更快、更有效率.

  • 所以我们如果有做运维甚至是基础管理 Linux 服务器的朋友,只要学会了 Shell 编程,大大的可以节约我们的时间,更快捷的管理我们的服务器了.

  • Bash 是 Linux 标准默认的 Shell,是 BourneAgain Shell 的缩写, 因为 bash 有很多特性,比如:可以使用类似 DOS 下面的 doskey 的功能,用方向键查阅和快速输入并修改命令.自动通过查找匹配的方式给出以某字符串开头的命令

  • 还有就是 bash 包含了自身的帮助功能,你只要在提示符下面键入 help 就可以得到相关的帮助, 在 Linux 系统中我们经常看见以:#!/bin/bash 开头的文件内容,这就是声明了该文件是一个基于 bash 的 Shell 编程文件

干货

有这么一个程序 :

  • #!/bin/bash
    cd /home/liwei/mongodb/bin
    ./mongod --dbpath=../liwei_db
  • 我们知道计算在执行指令的时候,是一条一条执行的。那么很好理解以上这 3 行。依次操作的目的是:进入mongodb/bin 目录,接着执行启动mongodb 数据,保存为 m.sh,这样,只要我们在 Linux 终端执行一条:sh m.sh,回车,计算就会依次执行指令,达到启动 mongodb 数据库的功能.

  • 那么要执行更多的指令,可以么?回答肯定是可以,如果我们需要执行上百行指令,单独执行的话,我们要重复操作,那么把它们依次写入一个 Shell,这样来执行的时候就可以很方便了,执行 Shell 的过程中,我们可以通过 > 或者 >> 来记录下一些节点的结果报告.

  • 比如这么一个shell:

    #!/bin/bash
    cd /lamp
    ls *.tar.gz > ls.list
    for TAR in `cat ls.list`
    do
      tar -zxf $TAR
    done
  • 这个 Shell 要解决的实际问题是将 lamp 目录里面所有的压缩包,批量解压出来,这样我们可以看出 ls 的结果集可以拿出来参与下一个指令的执行

  • 那么我们现在有个需求就是将某个文件夹下所有的文件名字里的大写字母改成小写字母,如果要人工一个个改的话,但是找文件就够眼花蛋疼了,这个时候 Shell 就发挥了强大的力量了

    #!/bin/bash
    for file in `ls | 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 编程,远远不止我给大家分享的这些,还有很多强大的地方,大家慢慢的挖掘吧。

PS

感谢关注「GitHub 热门」公众号,带你了解技术圈内热门新鲜事!

file

本作品采用《CC 协议》,转载必须注明作者和本文链接
感谢关注「GitHub 热门」公众号
本帖由系统于 2年前 自动加精
讨论数量: 2
Summer

好基础,来点有深度的

5年前 评论
Destiny

@Summer :punch: 嗯嗯, 活学活用!

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!