• 深入浅出Shell编程


    深入浅出Shell编程: 前言

    现在编程语言越来越多,C, C++, perl, php, Java ...... 有点让程序员无所适从。每种语言都有其优势,在Unix/Linux平台上,Shell脚本使用非常广泛,其原因在于一群聪明人写了许多工具包,你可以直接在这些工具的基础之上,实现你自己的需求。在了解shell编程之前,先了解shell的背景。

    0.1 shell 背景

    第一个重要的 shell 是 Bourne shell (如此命名是为了纪念此 shell 的发明者 Steven Bourne), 1979 年第一个流行的 Unix 版本 7 发行时, 开始使用 Bourne shell. Bourne shell 的主档名为 sh, 因此, 日后人们便以 sh 为 Bourne shell 的主要识别名称. 虽然目前Unix 上的 shell 有许多种, 但 Bourne shell 的地位至今仍然没有改变. 许多 Unix 系统中仍然使用 sh 做为重要的管理工具.

    第一个广为流行使用的 shell 变种是 C shell. C shell 主要附在 BSD 版的 Unix 系统中. 它的作者是柏克利大学的 Bill Joy. C shell 主要是因为其语法和 C 语言相类似, 因而得名. 这使得 Unix 系统的程式师, 在学习 C shell 时, 感到相当地方便容易.

    以上这二种形成 shell 的二大主流, 后来的变种 shell 大都攫取这二种 shell 的优点. 比如 Korn, tcsh 及 bash.

    Bash shell 是 GNU 计划的重要工具软体之一, 也是 GNU 作业系统中标准的 shell.Bash 相容于 sh, 因此, 许多早期开发出来的 Bourne shell 都可以继续在 bash 中运作. 现在我们安装好的 Redhat Linux 便是完全使用 Bash. (/bin/sh -> /bin/bash)

    Bash 在 1988 年诞生, 最初的作者是 Brian Fox, Chet Ramey 於 1989 加入, 现在官方正式的维护者是 Chet Ramey, 他的工作便是持续不断地增强 bash 的功能. 1995~1996 期间推出 bash 2.0 , 在这之前, 广为使用的版本是 1.14.x, 它增加了许多新的功能, 以及更好的相容性. 当然, Bash 是完全免费的, 它是 Open Source 的一员, 原始码全部开放.

    废话少说,很多人喜欢直来直去,那么让你先看看经典的"Hello, World!"

    0.2 Hello World!

    多么熟悉的字眼啊?用c语言是:

    main()
    {
    printf("Hello, World!\n");
    }

    用shell会是什么呢?很简单, 你直接在你的提示符输入:

    echo "Hello World!";

    如果是写在文件hello.sh 中:

    #!/bin/sh
    #this is the first script
    echo "Hello World!";

    这么简单还要你讲么?(你要是这都看不懂,那我真是没法讲了) 当然,这只是例行公式。Hello, World嘛,总不能太难。这里需要说明的:

    1. 养成良好的习惯,shell文件以".sh"作为后缀
    2. 注释使用"#"开头
    3. 文本的第一行一定要写成 #!/bin/sh (#!后是你使用shell所在的路径)
    4. 编辑的文本要想让其运行,使用chmod +x hello.sh
    5. 运行程序 ./hello.sh

    在shell中,分号';'是用来表示一个命令的结束,同样换行也会表示命令结束。因此,你可以在一行上写几个命令,例如:

    #!/bin/sh
    cd /home/winter ; echo "Hello World!" ;

    再看看下面,我们马上要超越hello world.

    0.3 超越Hello World

    这个例子好像有些不一般。编辑文件hello2.sh

    #!/bin/sh
    #hell2.sh -- 用来向用户问好。
    if [ $# -ne 1 ] ;
    then
    echo "Usage: $0 username";
    exit 1;
    else
    echo "Hello World, Hello $1 !";
    fi

    这把看懂了么?有点意思吧?下面给你解释一下:

    1. [...] 是用来测试。
    2. -ne 表示不等于
    3. if 用于判断,和then else 联合使用,以 fi 结束
    4. $# 表示参数个数
    5. $0 表示脚本名称
    6. $1 表示第一个参数。

    总体意思就是:
    检测参数,如果没有输入一个名字作为参数,则输出Usage 信息,否则,打印 Hello Word, Hello ursername . 试试输入:($为提示符)

    $ chmod +x hello2.sh
    $ ./hello2.sh
    Usage: hello2.sh username
    $ ./hello2.sh Winter
    Hello World, Hello Winter!

    再看看被某些人称为所谓的奇技淫巧的用法:

    $ echo "the resutl is $(( 100 / 25 ))"
    the resutl is 4

    还有

    find ./ -type f -exec chmod 777 {} \;

    不要性急,这些只是小菜一碟,更有意思的在后面,先看看本书结构。

    0.4 本书结构

    本书分成3部分,每部分重点不一样。

    第一部分是Shell基础,主要讲Shell命令。如果你对shell命令很是熟悉,这部分你可以先略过,但是awk 和sed 那部分希望你还是好好学习学习。听说awk 和sed 在国外大学都要学一个学期,专门的一门课。

    这部分包含6章,基本覆盖了绝大多数shell 命令,每个命令都有详细解释。这部分其实可以作为你 Unix/Linux 常用命令备查手册。我之所以写这么详细,也是希望以后自己能够参考。当然,这里一些系统管理的命令,我并没有详细记录,因为这些对于编程来说,应用稍微少一些。

    在第一部分中还重点讲述了awk 和 sed,这是我平时使用最多的两个命令,应该说是工具,如果你要处理文本,他们可真是虎将,不要小瞧。

    第二部分开始真正讲解编程了。你要是以前在学校学习过一些计算机语言,哪怕是basic都行,只要你有个概念。shell编程架构并没有太多的特别之处,它的优势在于整合各部分的资源。

    这部分主要介绍,循环,条件分枝,命令行参数等,这些是在编程中,构建整个架构的基础。千万不要跟我讲用shell 来面向对象编程,或者范型编程,或许可以,但肯定不是这本书能教给你的。这里的操作是最基本的最简单的,流水线设计和操作。最简单的往往是最稳定的。

    第三部分是一些高级主题,前面两部分已经可以让你做很多事情了,如果你希望用shell更多功能,也希望更加炉火纯青,那么你仔细看看第三部分。你会知道如何把Shell当成一种真正的编程语言。这部分主要介绍子函数,shell脚本调试技术和正则表达式等等。

  • 相关阅读:
    <整理> 在Bash中添加个人定制的命令
    <整理> linux常用命令及工具
    论文分享:目标检测-YOLO
    Siamese Attentional Keypoint Network for High Performance Visual Tracking--论文笔记
    ubuntu 相关软件设置
    anoconda 神经网络 相关操作
    转载:决策树算法梳理
    转载:XGBOOST算法梳理
    XGB算法梳理
    决策树算法梳理
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/1248525.html
Copyright © 2020-2023  润新知