zoukankan      html  css  js  c++  java
  • Unix & Linux 教程学习_6

    第13章 使用shell:命令和定制

    13.1 元字符

    所有非字母数字字符: P247

    字符 英文名称 Unix绰号
    & ampersand(和号) ---
    ' apotrophe(撇号) 引号、单引号
    * asterisk(星号) 星号
    @ at sign(at 符号) at
    ` backquote(反引号) 反引号(backtick)
    backslash(反斜线) ---
    {} brace brackets(花括号) 花括号、波形括号
    ^ circumflex(音调符号) 插入记号
    : colon(冒号) ---
    , comma(逗号) ---
    $ dollar sign(美元符号) 美元
    <Return> enter、return(回车) 新行
    = equal sign(等号) 等号
    ! exclamation mark(感叹号) bang
    > greater-than sign(大于符号) 大于
    - hyphen(连字符)、minus sign(减号) 虚线、减号
    < less-than sign(小于号) 小于
    # number sign(序数符号) hash、pound
    () parentheses(圆括号) ---
    % percent sign(百分比符号) 百分比
    . period(点号)
    + plus sign(加号)
    ? question mark(问号) ---
    " quotation mark(引号) 双引号
    ; semicolon(分号) ---
    / slash(斜线) 正斜线
    <Space> space(空格) ---
    [] square brackets(方括号) 方括号
    <Tab> tab(制表符) ---
    ~ tide(波浪号) ---
    _ underscore(下划线) ---
    | vertical bar(竖线) 管道

    shell中使用的元字符 (P248)

    字符 章号 名称 作用
    {} 24 花括号 花括号扩展: 生成一种字符模式
    | 15 管道 命令行: 创建一个管道线
    < 15 小于 命令行: 重定向输入
    > 15 大于 命令行: 重定向输出
    () 15 圆括号 命令行: 在子shell中运行命令
    # 14 hash 、pound 命令行: 注释的开头, 忽略该行其余部分
    ; 10 分号 命令行: 用于分隔多条命令
    ` 13 反引号 命令行: 命令替换
    ~ 24 波浪号 文件名扩展:插入home目录的名称
    ? 24 问号 文件名扩展: 匹配任意一个字符
    [] 24 方括号 文件名扩展:与一组字符中的字符匹配
    * 24 星号 文件名扩展: 匹配0个或多个字符
    ! 13 bang 历史列表: 事件标记
    & 26 和号 作业控制:在后台运行命令
    12 反斜线 引用: 下一个字符转义
    ' 12 引号,单引号 引用: 取消所有的替换
    " 12 双引号 引用: 取消大部分替换
    {} 12 花括号 变量: 确定变量名称的界限
    $ 12 美元符号 变量: 用变量的值替换
    <Return> 7 新行字符 空白符: 标记一行结束
    <Tab> 10 制表符 空白符: 在命令行中分隔单词
    <Space> 10 空格符 空折符: 在命令行中分隔单词

    上表中有几个元字符用于文件名扩展,也称为“通配符(globbing)详情见P631页


    13.2 引用和转义

    有时候,可能希望按字面上的含义使用元字符, 而不使用其特殊的含义。必须告诉shell按字面意义解释字符。这样做时,称其为引用字符
    字符引用方法有三种:

    • 使用反斜线。 引用单个字符(称为转义了这个字符)。
    • 使用单引号' '。 引用一串字符。
    • 使用双引号" "。 引用一串字符, 但是保留$(美元)、 `(反引号)和(反斜线)的特殊含义。

    当使用反斜线引用单个字符时,我们称反斜线为“转义字符
    当程序位于一种特定模式,而我们将它修改到另一种模式时,称这是由一种模式转义到另一种模式。当通过按下特定键修改模式时,称该特定键为转义字符。

    13.3 强引用与弱引用

    有时候称单引号为 强引用 (strong quote), 双引号为 弱引用 (weak quote)。
    实际上,反斜线是所有引用中最强的一个。反斜线可以引用任何东西。 反斜线如此强大,它甚至可以引用新行字符。

    13.4 shell内置命令: type

    上些命令在shell的内部, shell可以直接解释它们。 这些是内部命令,称为内置命令(builtin command), 其它所有命令是外部命令, 即必须独自运行的独立程序。
    shell在自己的进程内运行内置命令。外部命令则shell搜索合适的程序,然后以一个单独的进程运行该命令。
    查看某命令是否为内置命令的快捷方式就是用type命令:
    type command...
    例:

    type date time set
    date is /bin/date time is a shell keyword set is a shell builtin

    13.5 学习内部命令

    实际上,所有的内置命令都记录在shell的说明书页中。一些Unix/Linux系统对于内置命令拥有独立的说明书页。使用apropos命令:

    例:
    apropos builtin

    如果系统上有这样的说明书页,那么它就是快速查看所有内置命令列表的地方。对于Linux和FreeBSD来说,可以使用:

    man builtin

    Linux还有一个help命令,可以以若干方式显示builtin说明书页的信息。该命令的语法为:

    help [-s] [command...]
    例:
    help set

    如果只希望查看某一条内置命令的语法,可以用-s(syntax,语法)选项:

    thlp -s pwd history kill

    13.6 外部命令及搜索路径

    如果命令不是shell中内置的---大多数命令都不是内置的. 那么shell必须查找出合适的程序来执行。shell检查PHTH环境变量,PATH包含一串字符,这就是一系列目录名称,我们称之为__搜索路径__。
    如果想查看搜索路径,那么显示PATH变量的值即可:

    echo $PATH
    可能的输出是:
    /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

    这个例子中,搜索路径包含以下5个目录:

    /usr/bin
    /bin
    /usr/sbin
    /sbin
    /usr/local/bin

    13.7 修改搜索路径

    使用export命令可以使PATH变量成为环境变量, 这意味着shell及所有随后生成的进程都可以使用它。例:

    export PATH="/bin:/usr/bin:/usr/ucb:/usr/local/bin"
    //各个名称之间用冒号隔开,而且等号的两边没有空格!

    对于c-shell家族,设置的是shell变量path, 而不是环境变量PATH:

    set path=(/bin /usr/bin /usr/ucb /usr/local/bin)

    --++-----------------------------------------------

    如果想修改搜索路径,如想把$HOME/bin加入到搜索路径中:

    export PATH="$PATH:$HOME/bin"

    //--++----------------------------------------------

    如果指定一个点(.)字符,将向搜索路径中添加自己的“工作目录":

    export PATH="$PATH:$HOME/bin:."
    set path=($path $HOME/bin .)(~~~~~~) //c-shell家族

    除非你是专家,否则最好谨慎行事,将自己的目录放在搜索路径的末尾!

    13.8 黑客如何使用搜索路径

    P259

    13.9 shell提示

    最初,所有的shell都是两个字符的提示:一个字符后跟一个空格。Bourne shell使用一个$(美元)字符,C-Shell使用一个%(百分比)字符。现在,这一传统仍然保持。
    另一个惯例是关于超级用户的。当以root登录时,不管使用的是哪一种shell,shell提示总是一个#字符。需要格外小心。

    13.10 修改shell提示

    对于Bourne shell家族来说,需要修改一个PS1的环境变量(prompt for shell, number 1 <shell提示,编号1> )。C-Shell家族则要修改一个名为prompt的shell变量:

    export PS1="$(~) "
    set prompt="%(~) "

    其他增强shell提示:

    • 将变量的值插入到提示中
    • 利用转义字符使用各种特殊码
    • 将命令的结果插入到提示中(这就是所谓的命令替换)

    13.11 使用变量的值

    例: 将用户标识插入到提示中

    export PS1="${USER}$(~~)"
    set prompt = "${USER}%(~~)"

    13.12 引用变量时使用哪类引号

    仔细看两个例子:

    export PS1='Your lucky number is $"RANDOM} $(~~)'
    export PS1="${USER}$(~~)"

    其中一条命令使用单引号, 而另一条命令使用双引号。
    使用两种不同类型引号的原因在于所用的两个变量,RANDOM变量发生变化,USER变量不发生变化。
    在引用${USER}时,用双引号,从而允许将$字符解释成元字符,这意味着在处理该命令时,USER的值就固定下来了。
    而在引用${RANDOM}时用单引号,保留$字符的(字面)含义,以便稍后使用。 这一技术确保直到创建实际提示时才对RANDOM求值。

    前面说过,单引号是强引用,‘${VARIABLE}'时,所有的字符都取字面上的含义,$字符保留下来,以便稍后使用其原本含义。
    当使用"${VARIABLE}"时,$字符就被解释成元字符,而整个表达式在这个时刻就被替换为VARIABLE的值。

    因此,当需要引用变量时,要想一想:“该变量的值在使用之前是否会变化?” 如果是变的,则使用强引用来防止$字符被解释,直到需要它们。否则就用弱引用(双引号),从而允许$字符被立即解释。

    13.13 使用转义字符的特殊码

    参见: P264

  • 相关阅读:
    Read-Copy Update Implementation For Non-Cache-Coherent Systems
    10 华电内部文档搜索系统 search04
    10 华电内部文档搜索系统 search05
    lucene4
    10 华电内部文档搜索系统 search01
    01 lucene基础 北风网项目培训 Lucene实践课程 索引
    01 lucene基础 北风网项目培训 Lucene实践课程 系统架构
    01 lucene基础 北风网项目培训 Lucene实践课程 Lucene概述
    第五章 大数据平台与技术 第13讲 NoSQL数据库
    第五章 大数据平台与技术 第12讲 大数据处理平台Spark
  • 原文地址:https://www.cnblogs.com/cnyxj/p/11412948.html
Copyright © 2011-2022 走看看