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. 固定一个div在浏览器底部

    转自原文 如何固定一个div在浏览器底部   方法1:使用CSS绝对定位 div{ position:absolute; bottom:0px; left:0px; } 方法2:使用CSS固定定位 d ...

  2. 【原创】TCP超时重传机制探索

    TCP超时重传机制探索 作者:tll (360电商技术) 1)通信模型 TCP(Transmission Control Protocol)是一种可靠传输协议.在传输过程中当发送方(sender)向接 ...

  3. HDOJ 2196 Computer 树的直径

    由树的直径定义可得,树上随意一点到树的直径上的两个端点之中的一个的距离是最长的... 三遍BFS求树的直径并预处理距离....... Computer Time Limit: 1000/1000 MS ...

  4. FreeRTOS系列第20篇---FreeRTOS信号量API函数

    FreeRTOS的信号量包括二进制信号量.计数信号量.相互排斥信号量(以后简称相互排斥量)和递归相互排斥信号量(以后简称递归相互排斥量).我们能够把相互排斥量和递归相互排斥量看成特殊的信号量. 信号量 ...

  5. Mac关闭Iphone更新系统iTunes强制自动备份文件

    在任何时候iOS设备一连结苹果Mac电脑,电脑中的iTunes软件将自动对iOS设备进行同步和备份.虽然备份非常有用,当我们的iPhone/iPad出现问题的时候,可以直接恢复iPhone/iPad的 ...

  6. multiple web application host under the same website on IIS (authentication mode)

    第一种方式,修改forms的name how to set the forms authentication cookie path assume you have already solved th ...

  7. hdoj-看病要排队

    看病要排队 Problem Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看 ...

  8. XML案例(使用JAXP进行SAX解析)

    1.Book.java package cn.itcast.sax; public class Book { private String name; private String author; p ...

  9. selenium3 + Python - 处理浏览器弹窗(转载)

    作者:Real_Tino 转载链接:https://blog.csdn.net/real_tino/article/details/59068827 我们在浏览网页时经常会碰到各种花样的弹窗,在做UI ...

  10. Java.HttpClient绕过Https证书解决方案二

    方案2 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.security.Secur ...