【Shell编程】Shell程序设计

一、Shell简介

  做为Linux灵感来源的Unix系统最初是没有图形化界面的,全部的任务都是经过命令行来实现的。所以,Unix的命令行系统获得了很大的发展,逐步成为一个功能强大的系统。正则表达式

  Shell是一个应用程序,它是用户与Linux系统的接口,容许用户向操做系统输入须要执行的命令,有点相似于Windows的命令提示符,但功能更增强大。shell

  Shell对Linux系统的重要性不言而喻,它适合于比较简单的小任务,更加关注的是易于配置和维护,所以执行效率每每不是很高。Shell能够用来执行命令,调用Linux工具,还能够执行程序。Shell能够执行Shell程序,一般称为Shell脚本,在运行时解释执行,这就是Shell和Shell脚本的关系。编程

  Linux系统中有各类不一样的Shell,可是默认状况下,咱们默认老是做为/bin/sh安装的标准shell是GNU工具中的bash,bash开源而且可移植,被普遍使用。bash

二、管道和重定向

(1)重定向输出

$ ls -l > output.txt  # 将ls的输出直接保存到文件中  >
$ ps >> output.txt # 输出内容追加到文件末尾 >>

(2)重定向输入

$ more < input.txt # 重定向标准输入
$ more  input.txt # more自己也接收文件参数

(3)管道

  管道能够用来链接多个进程(数量没有限制),其操做符是 | ,经过管道链接的进程能够同时运行,而且数据流能够在他们之间自动协调的进行传递。编辑器

  注意一点:当使用管道执行一系列的命令时,若是使用重定向输出,相应的输出文件是在这一组命令被建立的同时当即被建立或者写入的,因此绝对不要在命令流中使用相同的文件名,不然会获得一个空文件。工具

$ ps | sort > output.txt # 对当前进程排序输出
$ ps | sort | more # ps的输出排序,而后一次显示一屏
$ ps -xo comm | sort | uniq | grep -v sh | more # 按字母顺序排序ps的输出,而后uniq取出名字相同的进程,而后用grep -v sh删除名为sh的进程,最终将结果分页显示在屏幕上
$ cat data.txt | sort | uniq > data.txt # 错误,会获得一个空文件

三、做为程序设计语言的Shell

(1)交互式程序

  在命令行上直接输入shell程序是一种简单方式,能够用来测试短小的代码段,方便快捷,更重要的是方便进行测试,这称为交互式脚本。可是每次要执行命令时,都要进行命令的输入,很繁琐,因此除了简单的测试通常状况下不会使用这种方法。测试

(2)建立脚本

  建立一个非交互式脚本是咱们一向的作法,这就是Shell编程。shell脚本有其独特的优点和用武之地,归纳为如下几点:(1)无需编译,解释执行;(2)以文本文件的形式存在;(3)有强大的正则表达式操做;(4)速度相对较慢,数据类型少;(5)主要用于系统管理和文件操做。操作系统

  建立并运行一个shell脚本过程以下:命令行

  • 文件编辑。用文本编辑器建立文件,进行编辑,Linux并不以扩展名区分文件类型,可是通常为了直观,能够命令为以.sh为后缀的格式。设计

    #!/bin/sh
    for file in *
    do
      if grep -l POSIX $file # 匹配文件名包含POSIX的文件
      then
          echo $file
      fi
    done
    exit 0
  • 把脚本设置为可执行。文件建立完成后,简单方法是直接调用,好比$ /bin/sh first.sh,这能够运行,可是更经常使用的方法是改变文件权限为可执行,而后直接运行。

    $ chmod +x first.sh # 改变权限为可运行
    $ first.sh # 直接运行
相关文章
相关标签/搜索