zoukankan      html  css  js  c++  java
  • shell基础篇(二)-shell变量

    1. 定义变量

    1).定义变量时,变量名不加美元符号($),如:
    var="hello world"
    2).注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
    首个字符必须为字母(a-z,A-Z)。
    中间不能有空格,可以使用下划线(_)。
    不能使用标点符号。
    不能使用bash里的关键字。
    var01=100
    var02="100"
    注意,这两个变量存的都是字符串。我们的shell是解释型语言,不像C,JAVA需要编译


     

    2.使用变量

    使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:

    echo $var
    echo ${var}   ##推荐这种。
    

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

    filename="lottu"
    echo "this is ${filename}01"
    如果不给filename变量加花括号,写成echo "this is $filename01",

    解释器就会把filename01当成一个变量(其值为空),这个filename01我们可没定义。
    代码执行结果就不是我们期望的样子了


     

    3.重新定义变量


    已定义的变量,可以被重新定义,如:

    abc="lottu"
    echo ${abc}
    abc="hello world"
    echo ${abc}
    

     4. 只读变量

    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。即其他语言的常量。如lottu03.sh

    #!/bin/bash
    var01="20"
    echo ${var01}
    readonly var01
    var01="10"
    

     运行结果如下:

    $ ./lottu03.sh 
    20
    ./lottu03.sh: line 5: var01: readonly variable
    

    5. 删除变量

    使用 unset 命令可以删除变量。语法:
    unset varname
    变量被删除后不能再次使用;unset 命令不能删除只读变量。


    6. 显示所有变量

    看看这个用户下有哪些变量包括环境变量,本地变量:set  ##我们之前定义的var,abc就是在这里面。
    只显示环境变量: env
    本地变量转换为环境变量;使用命令export
    删除环境变量;跟本地变量没区别;使用命令unset.


    7.变量的间接引用

    variable:+word   :如果变量 variable 被定义,那么返回 word,但不改变 variable 的值。
    variable:=value   :对未赋值的variable,将value值赋给它
    variable:-value    :对未赋值的variable,将value值赋给它,但不改变 variable 的值。

    :=和:-是两种常用的符号,看下面的例子

    例1:先将colour赋值为black,然后输出${colour:=blue}和${colour:-blue},两者输出结果相同,都为black,这是因为colour变量已经赋过值“:=”和”:-”都不重设其值。注意,使用以上两种符号时,都需要用花括号将赋值式子括起来,否则Shell将colour:=blue整个字符串当做变量名进行处理。

    $colour=black
    $echo "The background is ${colour:=blue}"
     The background is black
    $echo "The background is ${colour:-blue}"
     The background is black
    

     例2:清除colour变量值,再分别输出${colour:=blue}、$colour和${colour:-blue}、$colour的值,结果显示:${colour:=blue}和${colour:-blue}值都为blue,因为colour未赋值两个符号都将blue赋给colour。但是,调用${colour:-blue}后,colour仍然为空,即”:-”符号未将blue真正存储到colour中,而“:=”符号将blue真正存储起来。

    $unset colour
    $echo "The background is ${colour:-blue}"
     The background is blue
    $echo $colour
     
    $echo "The background is ${colour:=blue}"
     The background is blue
    $echo $colour                           #注意这步跟上面的比较
     blue  
    

    8.特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    在此先声明:这里的$0,$1-$9就别跟awk里面的弄混淆了;它们的意义是完全不同的哦。

    变量                                    含义
    $0                                      当前脚本的文件名
    $n                                      传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $#                                      传递给脚本或函数的参数个数。
    $*                                      传递给脚本或函数的所有参数。
    $@                                     传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。
    $?                                      上个命令的退出状态,或函数的返回值。
    $$                                      当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
    【注意】对$n;若n大于9;则需要加衣服{}。不然会冻僵了,就没人会认识了。例如${10}。这我就认识原来是老十。反之;你是老1+0,还是老十。这个我就要好好想想了。

    对于$?:可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。记住是上一个命令执行结果或者条件判断结果。意思是说你的条件判断有一堆命令;也只取最后一个;例如ll;cd md。是取cd md的返回结果。
    退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1
    意思是boolean说 0是成功的状态;非0是失败的状态。这跟awk里面的正好相反


     

  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/lottu/p/3963746.html
Copyright © 2011-2022 走看看