shell学习笔记(5)-变量篇

来源:互联网 发布:知企科技有限公司logo 编辑:程序博客网 时间:2024/05/16 08:06
Bash Shell把任何存储在变量中的值,皆视为以为符组成的“字符串”。变量仅针对当前shell有效,变量名称可使用英文字母、数字及_组成,但变量名第一个字符不能使用数字,另外英文字母大小写是区分的。

变量的声明
变量的声明有三种方式:
    myname=OLS3
    myname='Jack'
    myname="Jack"
    应注意(1)=的两侧不应有空格,如myname = LOS3是错误的。变量的值如果包含空格,则必须使用'或"的赋值方式,myname=ss dd是错误的。
          (2)shell可以不声明变量而直接使用,我们可以强制设定变量必须很声明后使用,方式如下
    #! /bin/bash
    shopt -s -o nounset(-s是打开选项的意思;-o是指可用set -o设定的选项,nounset表示变量一定要先设定才能后使用)
    echo $Infomix
    执行这个脚本会错误的,因为Infomix未声明就直接使用了。

变量的使用
获取变量的值有两种方式: $变量名称  ${变量名称}
    I=8
    echo $I   或者  echo ${I}   //会打印出8
    echo \$I  或者  echo '$I'   //会打印出$I,注意是',如果是"还是会打印出8


取消或清空变量
    销毁变量(不便把变量的内容取消,而且让这个变量不存在)
    unset -v 变量名称
    unset -f 函数名称
    清空变量
    myname=OLS3

    myname=


环境变量
    父shell中声明的变量,在子shell中是无效的。同样在子shell中声明的变量,在父shell中也是无效的。要想使子shell能继承父shell的变更,只需把父shell中的变量转换成环境变量。
    例: testVAR="Hello World" export testVar 或 export testVAR="Hello World",也可以用declare -x testVAR="Hello World"
    export是bash的内置命令,用途是把某一个变量输出,变成环境变量,以使后续的各种操作(包括子shell)皆可用于提该项变量的内容。

只读变量
    定义只读变量: readonly declare
    (1)readonly 变量名
       readonly -f 函数名
       readonly -a 数组名
       readonly或者readonly -p  列举出所有的只读变量
       例:s[0]=10
          s[1]=20
      s[2]=30
      readonly -a s
      s[3]=50  //报错,s为只读变量
     (2)declare -r 变量名
     declare还可以调整变量的其它属性,如declare -ir num="100" 声明num是只读的,且为整数形态
     declare -x设置环境变量,前面已介绍

数组
(1) A[0]=5 A[1]=10 A[2]=28
     echo ${A[1]}
(2) B=(23 88 99 66)
     echo ${B[2]}
(3) C=([3]=77 [1]=100 [5]=66)
     echo ${C[5]}
(4) D=(124 [8]=188 266)
     echo ${D[9]}
     取出数组中的所有值: echo ${B[@]} 得到四个以空格分开的数字
                         echo ${B[*]} 得到一整个字符串
     取得数组元素的个数: ${#B[@]} 或${#B[*]}
     若数组元素是字符串,还可以用以下语法取得元素的长度:${#A[3]}

     取消数组或数组元素 unset A     unset A[3]


取数组索引列表

    语法规则: ${!数组变量[@]} 或 ${!数组变量[*]}

    示例:

    D=(124 [8]=188 266)

    r=${!D[@]}

    echo $r    //输出 0 8 9


ar=(a b c xy z)

for i in "${!ar[@]}"

do

    echo "index $i: ${ar[$i]}"

done