程序员人生 网站导航

shell学习笔记之二(变量)

栏目:服务器时间:2015-08-04 07:36:19
    是1种弱类型的变量,声明时不需要指定其变量类型,也不需要遵守“先声明后使用”,任什么时候候只要想用就能够用。
    局部变量
      在某个shell中生效的变量,在其他shell中无效。可使用local内建命令来“显示”的声明局部变量
    环境变量
       shell脚本中,默许是全局的
    预设的环境变量:
       BASH:说明bash的全路径
       BASH_VERSION
       CDPATH:用于快速进入目录
       EUID:记录当前用户的UID
       FUNCNAME :在用户函数体内部,记录当前函数体的函数名
       HISTCMD:记录下1条命令在history命令中的编号
       HISTFILE:记录history命令的记录文件的位置
       HISTFILESIZE
       HOSTNAME
       HOSTTYPE:主机架构
       MACHTYPE:主机类型的GNU标示
       LANG:语言环境
       PWD:记录当前目录
       OLDPWD:记录之前目录
       PATH
       PS1:
          命令提示符,默许是[u@h W]$,其中u是用户名,h是主机名,W是当前工作目录的basename,$是用户UID的替换字符。
    定义和使用变量
        var=value
        注意:
            1、=两边没有空格 var = value(X)
            2、变量中有空格时必须要用””或’’引发来
        取值:${var}或$var
        注意:
        1、如果变量值援用的是其他变量,则必须使用双引号。由于单引号会禁止shell解释特殊字符$。
        2、由于shell是弱变量特性,因此即便在脚本中没有定义变量也是可以援用的,从而使得毛病很难找到。
        3、shell具有弱变量的特性,不需要声明就能够使用,可以设置变量必须先声明再使用
            shopt -s -o nounset
    取消变量
        unset var
    取消函数
        unset function
    特殊变量
        位置参数
            $1,...,$n  当n>10时,需要写成$(n)
            $0
            $@/$*      脚本所有的参数
            $#     脚本参数总和

        脚本或命令返回值
            $?	上1个命令的返回值,要查看某个命令的返回值必须在运行中个命令后立即查看$?
            linux中规定正常的退出命令和脚本应当以0作为其返回值,任何非0的返回值都表示命令未正确退出或正常履行
            在自动化脚本中,也能够通过$?变量的值判断之前命令的履行状态,从而采取不同的动作
    数组
        shell变量是弱类型的,其实不要数组的每个元素都是相同的类型,shell中的数组对元素个数没有限制,但是只支持1维数组
        shell对数组变量的声明非常宽松,随时都可以根据需要增加变量中的元素
        定义
            declare -a array
        初始化
            array[0]=0
            array[1]=1
            array[2]="hello"
              或
                declare -a array=(0 1 "hello")
                array[3]='waNG'
              或
                array=('john' 'sue')
              或
                array=([3]=3 [4]=4 [7]=4)
                    跳号赋值
        数组操作
            取值
                ${arrayname[index]}
                例:
                    1、echo ${array[0]} //取单个元素
                    2、echo ${array[@]} //取所有的元素值,得到的是以空格隔开的元素值
                    3、echo ${array[*]} //取所有的元素值,得到是1全部字符串
                    4、arr1=arr2     //这样相当于arr1=arr2[0]
            长度
                利用@或*可以将数组扩大成列表,然后使用#来获得数组元素的个数
                例:
                    1、echo ${#array[@]}
                    2、echo ${#array[*]}
                        通过本例也就知道了求字符串的长度,${#string}
            截取
                截取某个元素的1部份,对象可以是全部数组或某个元素
                例:
                    1、取出数组的第1,第2个元素
                        echo ${array[@]:1:2}
                    2、取出第2个元素从第0个开始连续5个字符
                        echo ${array[2]:0:5}
            连接
                conn=(${arr1} ${arr2})
            替换数组元素
                array=(${array[@]/old/new})
            取消数组或元素
                unset array[0]
                unset array
    只读变量
        readonly RO=100
        等效于:declare -r RO=100
    变量的作用域
        1、shell变量的作用域是在本shell内,属于本shell的全局变量,也就是从定义该变量的地方开始到shell结束,或主动使用unset删除该变量的地方为止。
        2、在函数题内使用local关键字声明了和全局变量同名的局部变量后,对该变量的操作只会影响局部变量,而不会影响与之同名的全局变量。
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐