• Bash指令语法和解析方式


    一、命名语法

    一条Bash指令的的命名一般包含三个部分:command(指令);option(选项);argument(参数)。

    命名的格式为:command option argument。

    ls -l -F file1 file2 file3
    

      -l:以单行格式输出文件详细信息

      -F:在每个输出项后面追加文件的类型标识符,具体含义包括:

    “*”表示具有可执行权限的普通文件;

    “/”表示目录。“@”表示符号链接;

    “|”表示命令管道FIFO;

    “=”表示sockets套接字;

    当文件为普通文件时,不输出任何的字符。

    选项

    对于选项(option)类型有两种:

    1)短选项(short option):由一个连字符和一个字母构成,例如:-a, -s等;
    2)长选项(long options):由两个连字符和一些大小写字母组合的单词构成,例如:--size,--help等
    

      通常,一个程序会提供short option和long options两种形式,例如:ls -a,--all。另外,短选项(short option)是可以合并的,例如:-sh表示-s和-h的组合,如果要表示为一个选项需要用长选项--sh。

    不是所有的Linux命令都遵循以上的规则,例如:

    find -type d -mindepth 2

    参数

    1、可以是零个或者多个:有默认值;不需要参数。

    2、可以是一个或者多个。

    二、语法的描述规则

    1、方括号中的项是可选的;

    2、不在方括号中或者是在大括号中的项是必选的;

    3、黑体字必须按原样准确键入;

    4、斜体字必须使用适当的值代替;

    5、后面接省略号的参数可以多次重复。

    如:

    ls [ABCDEFGHLOIU@abcdefghlkj][file...]
    

    6、如果一个单独的选项和一个参数组合在一起,那么该选项和参数必须同时使用,如:

    find [-H][-L][-P][-D][-D debugopts][-O level][path...][expression]
    

    7、由|(竖线)字符分开的两个或者多个项,表示可以从这个列表中选择一个项,如:

    who [OPTION]...[FILE|ARG1 ARG2]
    

      

    三、一次输入多条命令

    1、以”;“隔开时,如:

    date;cal
    cal;date   
    注:当前者执行失败时,后者就不会执行
    

      

    2、以“||”隔开时,如:

    date||cal
    cal||date
    注:当前者执行失败时,后者才会执行
    

      

    四、强引用和弱引用

    1、弱引用 ""

    echo "lucky number is ${RANDOM}"
    输出的结果为:
    lucky number is 12324(随机数)
    

      

    2、强引用 ' '

    echo 'lucky number is ${RANDOM}'
    输出的结果为:
    lucky number is ${RANDOM}

     

    为了弄清楚引起这两种引用的差异的原因。我们需要去了解命令行解析的相关知识。

    命令行解析

    命令行的解析过程:

    1、根据${IFS}(Internal Filed Separator)将其拆分为多个字段word;

    2、对其中的(metacharacter)元字符进行处理;

    3、对命令进行重组并执行。

    补充:元字符包括

    =:设定变量    &&:若上一个命令返回TRUE,继续执行
    $:引用变量    ||:若上一个命令返回FALSE,继续执行
    |:管道            ...:省略
    {,}:界定变量范围
    

      

    强引用' '内的所有meta元字符被关闭;

    弱引用" "内的大部分meta元字符被关闭,部分被保留,如$,{,}等。

    关于强引用和弱引用的小练习:

    $ A="B C"
    $ echo "$A"    输出B C
    $ echo '$A'     输出$A
    $ echo " '$A' "   输出'B C'
    $ echo ' "$A" '   输出"$A"
    $ echo ' '$A' '    输出B C
    

      

  • 相关阅读:
    Cognitive Radio Cognitive Network Simulator (NS3 based)
    RCU(Read-Copy Update)synchronize原理分析
    英雄黑客:一个试图提高物联网安全性的“义务警员”
    Android NDK放弃GCC,全面转向Clang
    Why is FreeBSD deprecating GCC in favor of Clang/LLVM?
    (Low Level Virtual Machine) LLVM 与 Clang介绍
    RMS谈GCC、LLVM和Copyleft
    LLVM和Clang背后的故事
    FEP: 测试 lineage, 获得 CPU, MEMORY 统计信息
    以wifi-example-sim.cc为例说明NS3统计数据模型
  • 原文地址:https://www.cnblogs.com/zrs123/p/14000685.html
Copyright © 2020-2023  润新知