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

    第12章 使用shell: 变量和选项


    • 交互式 shell
    • 进程
    • 环境变量
    • shell变量
    • shell选项
    • 元字符
    • 引用
    • 外部命令
    • 内置命令
    • 搜索路径
    • 历史列表
    • 自动补全
    • 命令行编辑
    • 别名
    • 初始化文件
    • 注释

    echo $SHELL
    //显示所使用的shell的名称
    要注意,如果我们临时改变所使用的shell,上面的命令是不能显示出来的。

    12.1 交互式shell和非交互式shell

    非交互式是独立与人运行的程序,如果我们运行一个脚本, 此时的shell就是一个非交互式shell.
    当运行shell脚本时,会自动启动一个新的shell,并将解释脚本的任务交给该shell处理。

    12.2 环境、进程和变量

    Unix中,每个对象都被表示为一个文件或者进程,文件存放数据或用来访问资源,而进程是正在执行的程序。
    在进程运行过程中,它需要访问所谓的环境, 即一组用来存放信息的变量。
    Unix shell有两种不同的变量, "shell变量""环境变量"
    对变量只有四种类型的操作:

    • 创建变量
    • 查看变量的值
    • 修改变量的值
    • 销毁变量

    全局变量与局部变量

    • shell变量是创建它们的shell的局部变量
    • 环境变量是全局变量

    不同与一般的编程,shell中的局部变量与全局变量之间的界限是模糊的.
    一个变量同时拥有局部和全局变量的含义。 例如它对shell本身有用(这意味着这些变量应该是shell变量),并且对由shell启动的进程也是有用的(这就意味这些变量应该是环境变量)。
    Bourne shell家族(Bash, Korn shell)与C-shell家族(C-Shell, Tcsh)有些不同.
    Bourne shell家族:定义为局部变量,或同时为局部变量与全局变量。没有完全的全局变量.
    创建的都是局部变量.通过用export命令将shell变量修改成"shell+环境"变量
    例:创建一个名为HARLEY的变量,并将值cool赋给它:

    HARLEY=cool
    此时HARLEY只是一个shell变量,如果启动一个新shell或运行一条命令,则新进程不能访问HARLEY,下面的命令将HARLEY导出到环境中:
    export HARLEY

    C-Shell家族中,环境变量通过命令setenv创建,并以大写字母命名, shell变量由set命令创建,并以小写字母命名。

    12.4 显示环境变量: env, printenv

    大多数时候,我们用默认的变量,显示默认变量可以用env或printenv命令

    env
    或者
    printenv

    12.5 显示shell变量: set

    12.6 显示及使用变量的值: echo, print

    要显示一个变量的值,在变量名前加$字符. 后面用花括号把变量名括起来:

    echo ${TERM}
    //大多数情况下可以省掉花括号,像下面:
    echo $TERM

    如果用echo显示时有元字符,则需要用双引号括起来.
    例如: 想要显示尖括号中的TERM的值, 用下面的句子会报错:

    echo The terminal type is <$TERM>.

    因为尖括号是元字符,它本身表示重定向,所以这里无法正常显示,这时可以用双引号括起来,让shell以字面意思显示它.

    echo "The terminal type is <$TERM>."
    显示为:
    The terminal type is <xterm-256color>.

    所有的shell都允许使用echo命令显示文本和变量,Korn shell还可以使用print命令:

    print "The terminal type is $TERM."

    12.7 Bouren shell家族使用变量: export, unset

    Bouren shell家族,创建变量非常简单。例:

    HARLEY=cool
    //一定要确保不在等号两边加空格!!!

    如果希望使用一个包含有空白符(空格或制表符)的值,则需要将值放在双引号中“

    WEEDLY="a cool cat"

    如果变量存在,还可以使用相同的语法修改变量的值。例如:

    HARLEY=smart
    //将HARLEY的值改成"smart"

    在Bourne shell家族中, 每个变量都自动地被设置成shell变量。使用export命令可以将变量导出到环境中。

    export HARLEY WEEDLY
    //HARLEY和WEEDLY变量同时由shell变量变为"shell+环境“变量.

    但是,还有一种更好的方法。 export命令实际上允许同时设置变量并导出到环境中。语法为:

    export NAME [=value] 例:
    export PAGER=less
    //创建一个值为less的变量,并将其导出为"shell+环境"。

    export允许指定一个或多个变量名,即一次可以创建及导出多个变量.
    当删除变量时,称这是在“复位(unset)“变量。 语法为:

    unset NAME
    例:
    unset HARLEY WEEDLY

    12.8 C-Shell家族使用变量:setenv, unsetenv, set unset

    在C-Shell家族中,使用setenv和unsetenv命令可以设置(创建)或复位(删除)环境变量。
    设置或复位shell变量时,需要用set和unset命令。
    设置环境变量:

    setenv NAME [ value ]
    //注意,命令中不使用=(等号),例:
    setenv HARLEY cool

    复位环境变量:

    unsetenv NAME
    例:
    unsetenv HARLEY

    设置shell变量:

    set name[=value]
    //注意,与环境变量不同的是,这里要用=(等号),例:
    set term=vt100

    删除shell变量:

    unset variable
    //其中variable是变量名,例:
    unset term

    理解将变量设置为null和删除变量之间的区别:

    set harley=cool
    set harley
    unset harley

    第一条创建名为harley的shell变量,并赋值为"cool", 第二条命令将变量harley的值设置为"null", 最后一条命令为删除变量harley.

    12.9 shell选项:set -o, set +o

    对于C-Shell家族来说,可以使用shell变量控制shell行为。
    而Bourne shell家族,则需要用shell选项
    注意shell选项与shell变量的区别, shell选项像是on/off开关一样。
    当打开一个选项时,就说设置了这个选项。这将告诉shell以某种方式运行。
    当关闭这个选项时,就说复位了这个选项。这也就是告诉shell停止以这种方式运行.

    • shell选项或者是off或者是on,它们不需要创建。
    • 当设置shell选项时,就将shell选项打开。
    • 当复们shell选项时,就将shell选项关闭。

    设置一个选项:
    set -o option
    要复位一个选项:
    set +o option
    例,设置monitor选项:
    set -o monitor
    要复位monitor选项,则:
    set +o monitor

    12.10 显示 shell 选项

    Bourne shell家族使用shell选项控制shell的操作。显示shell选项的当前值,可以用set -oset +o命令本身:

    set -o
    set +o

    12.11 机器可读,人类可读

    set -o 以一种易于阅读的方式显示输出。
    set +o 以适合用作shell脚本的数据。

    12.12 练习

  • 相关阅读:
    CXF学习(2) helloworld
    foreach与Iterable学习
    java基础之JDBC八:Druid连接池的使用
    java基础之JDBC七:C3P0连接池的使用
    java基础之JDBC六:DBCP 数据库连接池简介
    java基础之JDBC五:批处理简单示例
    java基础之JDBC四:事务简单示例
    java基础之JDBC三:简单工具类的提取及应用
    java基础之JDBC二:原生代码基础应用
    java基础之JDBC一:概述及步骤详解
  • 原文地址:https://www.cnblogs.com/cnyxj/p/11263633.html
Copyright © 2011-2022 走看看