1、Shell简介

  作为Linux灵感来源的Unix系统最初是没有图形化界面的,所有的任务都是通过命令行来实现的。因此,Unix的命令行系统得到了很大的发展,逐步成为一个功能强大的系统。

  Shell是一个应用程序,它是用户与Linux系统的接口,允许用户向操作系统输入需要执行的命令,有点类似于Windows的命令提示符,但功能更加强大。

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

  Linux系统中有各种不同的Shell,但是默认情况下,我们默认总是作为/bin/sh安装的标准shell是GNU工具中的bash,bash开源并且可移植,被广泛使用。

2、管道和重定向

(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 # 错误,会得到一个空文件

3、作为程序设计语言的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 # 直接运行

【Shell编程】Shell程序设计的更多相关文章

  1. [ SHELL编程 ] shell编程中数值计算方法实例

    SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结.主要包括let.bc.expr.(())等. 1.let 使用格式:let 表达式,表 ...

  2. Linux编程 20 shell编程(shell脚本创建,echo显示信息)

    一概述 前面19章里已经掌握了linux系统和命令行的基础知识,从本章开始继续学习shell脚本的基础知识.在大量编辑shell脚本前,先来学习下一些基本概念. 1.1    使用多个命令 Shell ...

  3. (三)Linux Shell编程——Shell常用命令(输出、判断、循环、函数、包含)

    3. 常用命令 3.1 输出 3.1.1 echo命令 echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串.命令格式: echo arg name="coding" ...

  4. Shell编程——shell常用命令

    浏览器标签页的切换:Ctrl+Tab [终端]打开终端快捷建:Ctrl+Alt+t关闭终端快捷键:Ctrl+Shift+q打开新的终端标签页快捷键:Ctrl+Shift+t 关闭终端标签页快捷键:Ct ...

  5. shell编程 Shell script 的默认变量($0, $1...)

    Shell script 的默认变量($0, $1...) 我们知道指令可以带有选项与参数,例如 ls -la 可以察看包含隐藏文件的所有属性与权限.那么 shell script 能不能在脚本文件名 ...

  6. Shell编程——Shell中的数学运算

    在Linux Shell中进行数学运算,通常能够使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1.let命令 let命令是bash内置命令.能够实现简单的算术以及逻 ...

  7. Shell编程笔记

    Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理.   修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...

  8. 10、shell编程+流程控制+分支嵌套

    SHELL 编程     shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell)     shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. ...

  9. shell编程--基本格式,基本语法,运算符,expr,(()),$[]

    02/shell编程 Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell Shell也是一门编程语言."."号执行脚本时,会让脚本在调用者 ...

  10. shell编程企业级实战

    如何才能学好Shell编程 为什么要学习shell编程 Shell是Linux底层核心 Linux运维工作常用工具 自动化运维必备基础课程 学好shell编程所需Linux基础 熟练使用vim编辑器 ...

随机推荐

  1. android程序在调试时出现了套接字异常“java.net.SocketException: Permission denied”该如何解决

    Socket不能对外连接,错误不会被报出,调试的时候,能看到Exception, 一般是抛出 java.net.socketexception permission denied这个异常.只要你的程序 ...

  2. Android颜色透明度数值一览

    100% — FF 95% — F2 90% — E6 85% — D9 80% — CC 75% — BF 70% — B3 65% — A6 60% — 99 55% — 8C 50% — 80 ...

  3. js中DOMContentLoaded和load的区别

    如题:DOMContentLoaded和load都是页面加载的时候触发的事件.区别在于触发的时机不一样. 浏览器渲染页面DOM文档加载的步骤: 1.解析HTML结构. 2.加载外部脚本和css文件. ...

  4. Java 构造时成员初始化的陷阱

    1.首先列出代码 Base.java public class Base { Base() { preProcess(); } void preProcess() {} } Derived.java ...

  5. Zoj 3535 Gao the String II (AC自己主动机+dp)

    题目大意: 用集合A中的串构造出一个串,使之让很多其它的setB中的串成为他的子串. 思路分析: 和 Codeforces 86C 几乎相同. 只是这里是要用A中的构造. 先用A 和 B的串构造一个自 ...

  6. 未能加载文件或程序集“System.Web.Helpers, Version=2.0.0.0

    在本地终于用上了ASP.NET MVC4自带的认证功能,但放到生产服务器上就出问题了:打开注册页面没问题,但一点下注册按钮就报错了: 未能加载文件或程序集"System.Web.Helper ...

  7. luogu1991 无线通讯网

    题目大意 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话.任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有 ...

  8. luogu2085 最小函数值

    题目大意 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x,Ai,Bi,Ci∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个. ...

  9. oc63--协议@protocol1

    // // SportProtocol.h // day17 #import <Foundation/Foundation.h> @protocol SportProtocol <N ...

  10. pair类型 这次遇到了,记录下来,方便彼此xue习

    首先,这个pair类型是在头文件utility.h中. 一个piar保存两个数据成员,是用来生成特定类型的模板,当创建一个pair时,我们必须提供两个类型名,pair的数据成员将具有对应的类型,两个类 ...