zoukankan      html  css  js  c++  java
  • Shell之变量

    前言

      变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。当然,如果有必要,你也可以使用 declare 关键字显式定义变量的类型,但在一般情况下没有这个需求,Shell 开发者在编写代码时自行注意值的类型即可。

    变量的分类

    内置变量

    具体详情请参考:https://www.cnblogs.com/guge-94/p/10688982.html

    环境变量

    常用的环境变量

    PATH            指定命令的搜索路径。通过设置环境变量PATH可以让我们运行程序或指令更加方便。 
    HOME            指定用户的主工作目录,即为用户登录到Linux系统中时的默认目录,即“~”。
    HISTSIZE        指保存历史命令记录的条数。
    LOGNAME         指当前用户的登录名
    HOSTNAME        指主机的名称。
    SHELL           指当前用户用的是哪种shell
    LANG/LANGUGE    和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
    MAIL            指当前用户的邮件存放目录
    PS1             第一级Shell命令提示符,root用户是#,普通用户是$
    PS2             第二级命令提示符,默认是“>”
    PS3             第三级命令提示符。
    TMOUT           用户和系统交互过程的超时值。
    RANDOM          随机数变量。每次引用这个变量会得到一个0~32767的随机数。
    PWD             当前工作目录
    PPID            当前进程的父进程的PID
    SECONDS         脚本已经运行的时间(以秒为单位)

    自定义变量

    用户自己定义的变量,自定义变量又叫局部变量,仅能在用户当前的子进程中使用;

    变量的定义

    Shell 支持以下几种定义变量的方式:

    variable=value
    variable='value'
    variable="value"
    variable=`command`
    variable=$(command)

      variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的,稍后我们会详细说明。注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。单引号与双引号的区别请参考:https://www.cnblogs.com/guge-94/p/10678192.html

    注意:shell中的变量也有作用域的概念。

    变量的相关操作

    只读变量

    variable="value"
    readonly variable

    删除变量

    variable="value"
    unset variable

    使用变量

    variable="value"
    echo ${variable}
    echo $variable

    定义全局

    export variable="value"
    export variable # 变量如果事先已经定义好了,则只需要将相应的变量名放入到export后面,即可将相应的自定义变量变成环境变量

    显示所有环境变量

    env

    相关命令

    export

    用于设置或显示环境变量

    格式

    export [-fnp][变量名称]=[变量设置值]

    选项

    -f  代表[变量名称]中为函数名称。
    -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
    -p  列出所有的shell赋予程序的环境变量。

    env

    显示当前用户的变量

    set

    设置所使用shell的执行方式,可依照不同的需求来做设置

    格式

    set [+-abCdefhHklmnpPtuvx]

    选项

    -a          标示已修改的变量,以供输出至环境变量。
    -b          使被中止的后台程序立刻回报执行状态。
    -C          转向所产生的文件无法覆盖已存在的文件。
    -d          Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
    -e          若指令传回值不等于0,则立即退出shell。
    -f          取消使用通配符。
    -h          自动记录函数的所在位置。
    -H Shell    可利用"!"加<指令编号>的方式来执行history中记录的指令。
    -k          指令所给的参数都会被视为此指令的环境变量。
    -l          记录for循环的变量名称。
    -m          使用监视模式。
    -n          只读取指令,而不实际执行。
    -p          启动优先顺序模式。
    -P          启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
    -t          执行完随后的指令,即退出shell。
    -u          当执行时使用到未定义过的变量,则显示错误信息。
    -v          显示shell所读取的输入值。
    -x          执行指令后,会先显示该指令及所下的参数。
    -o          包含管道命令的语句的返回值,会变成最后一个返回非零的管道命令的返回值
    +<参数>     取消某个set曾启动的参数。

    比较常用的选项是-e与-o,有的人喜欢使用这个参数,是出于保证代码安全性的考虑。但有的时候,这种美好的初衷,也会导致严重的问题;设置了set -o,返回从右往左第一个非零返回值。

    unset

    shell内建指令,可删除变量或函数

    格式

    unset [-fv][变量或函数名称]

    选项

    -f  仅删除函数
    -v  仅删除变量

    readonly

    用于声明变量或函数的属性为只读,声明后这些变量或函数不可修改。

    格式

    readonly [选项] [参数]

    选项

    -f:定义只读函数;
    -a:定义只读数组变量;
    -p:显示系统中全部只读变量列表

    declare

    声明 shell 变量

    格式

    declare [+/-][rxi][变量名称=设置值] 或 declare -f

    选项

    +/-  "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
    -f  仅显示函数。
    r  将变量设置为只读。
    x  指定的变量会成为环境变量,可供shell以外的程序来使用。
    i  [设置值]可以是数值,字符串或运算式。

    变量的扩展操作

    请参考:https://www.cnblogs.com/guge-94/p/10482934.html

  • 相关阅读:
    Could note find result map com.xxxx.entity.UserAccountDO
    浏览器通过file://访问文件和通过http://访问文件有什么区别
    FreeMarker template error: The following has evaluated to null or missing: ==> blogger.md [in template "admin/about.ftl" at line 44, column 84]
    2018-01-03 --活动观赏鱼的2017总结及2018年展望
    eclipse open call hierarchy无效
    Mysql 查询重复的记录
    oracle用户、权限操作
    Oracle 修改表操作
    Python 魔法方法详解
    Python __dict__和vars()
  • 原文地址:https://www.cnblogs.com/guge-94/p/11022651.html
Copyright © 2011-2022 走看看