• 高级Bash脚本编程(一)


    高级Bash脚本编程

    Bash

    它是能力很强的计算机语言,被称为解释性语言或脚本语言,它可以调用所有的UNIX命令和工具再加上公共程序。

    Bash中的特殊字符

    • 注释(#) (除#!外,#!是用于指定当前脚本的解释器,我们这里为bash,且应该指明完整路径,所以为/bin/bash)
    • 分号(;)
      1. 命令分隔符
      2. 终止case选项,使用双分号(;;)可以终止case选项。
         #!/bin/bash
    
         varname=b
    
        case "$varname" in
         [a-z]) echo "abc";;
         [0-9]) echo "123";;
        esac
    
    • 点号(.)
    1. 等价于source命令,读取并执行FileName.sh中的命令
    • 引号

      1. 双引号(“)"STRING" 将会阻止(解释)STRING中大部分特殊的字符
      2. 单引号(') 'STRING' 将会阻止STRING中所有特殊字符的解释,这是一种比使用"更强烈的形式
    • 斜线和反斜线

      1. 斜线(/)文件名路径分隔符,除法。
      2. 反斜线()转意 通常用来转义双引号(")和单引号(')
    • 反引号(`)

      1. 命令替换,反引号中的命令会优先执行
    • 冒号(:)

      1. 空命令,在条件中等价于ture,在条件中表示什么也不做
      2. 变量扩展/子串替换,:>清空文件,但是并不会修改这个文件的权限。如果之前这个文件并不存在,那么就创建这个文件。:>>如果这个文件之前并不存在,那么就创建它。":"还用来在 /etc/passwd 和 $PATH 变量中做分隔符。
    • 问号(?)测试操作符 t=a<50?8:9

    • 美元($)

      1. 变量替换
      2. 命令替换
    • 小括号

      1. 命令组,在括号中的命令列表,将会作为一个子 shell (里面的变量是局部的)来运行
      2. 初始化数据
    • 大括号

      1. 文件名拓展(在大括号中,不允许有空白,除非这个空白被引用或转义。)例cp t.{txt,back}

      2. 代码块,又被称为内部组,这个结构事实上创建了一个没有名字的函数。(里面的变量是全局有效的)

    • 中括号

      1. 条件测试
      2. 数组的元素 a[0]
    • 尖括号 重定向

      1. test.sh > filename 重定向test.sh的输出到文件 filename 中。如果 filename 存在的话,那么将会被覆盖。
      2. test.sh &> filename 重定向 test.sh 的 stdout(标准输出)和 stderr(标准错误)到 filename 中。
      3. test.sh >&2 重定向 test.sh 的 stdout 到 stderr 中。
      4. test.sh >> filename 把 test.sh 的输出追加到文件 filename 中。如果filename 不存在的话,将会被创建。
    • 竖线(|) 管道:分析前边命令的输出,并将输出作为后边命令的输入。这是一种产生命令链的好方法。

    • 破折号(-)

      1. 选项,前缀 在所有的命令内如果想使用选项参数的话,前边都要加上“-”。
      2. 用于重定向stdin或stdout
    • 波浪号(~)表示home目录

    变量和参数

    变量的名字就是变量保存值的地方。引用变量的值就叫做变量替换。

    等号可以赋值,也可以做条件测试

    Bash并不区分变量的"类型"

    特殊变量

    • 局部变量
    • 环境变量
    • 位置参数

    引用和转意

    引用

    • 保留 $ 作为特殊字符的意义是为了能够在双引号中也能够正常的引用变量("$variable")。
    • $、`(后置引用)和 ""(转义符)在双引号中能使用
    • 在echo语句中,只有在单词分割或者需要保留空白的时候,才需要把参数用双引号括起来。
    • 当我们设置了bash内置变量IFS后,再使用echo输出时,会将所设定的字符用空格去代替。
    • 单引号(全引用)是一种比双引号(部分引用)更严格的引用方法。

    转意

    • 表示新的一行
    • 表示回车
    • 表示水平制表符
    • v 表示垂直制表符
    •  表示后退符
    • a 表示"alert"(蜂鸣或者闪烁)
    • xx 转换为八进制的ASCII码, 等价于0xx
    • " 表示引号字面的意思,如:

    注意:

    • 强烈注意, 在赋值的的时候, 等号前后一定不要有空格.
    • 如果在变量中存在空白,那么就必须加上引号

    未完待续

    参考资料

  • 相关阅读:
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
    构建之法阅读笔记02
    构建之法阅读笔记01
    管理系统的简单解析---web
    Java中的异常处理
    多态
    重写与重载
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/5315hejialei/p/5906998.html
Copyright © 2020-2023  润新知