Shell——变量与数组

来源:互联网 发布:淘宝b类违规行为 编辑:程序博客网 时间:2024/05/01 05:09

    像其他程序语言一样,shell语言支持变量赋值操作。shell的变量声明时没有类型的概念。而且从某种意义上来说,shell变量不需要声明,在给变量赋值的同时就指定了变量的类型及变量的值。变量的使用极大地增强了脚本的灵活性。

  1. 变量声明           很简单,格式是“变量=值”,注意在等式的两边不能有空格。如果两边均有两个空格,“变量 = 值”则是测试变量与值是否相等。而如果只在等号前面有空格,“变量 =值”,shell会寻找以变量为名的命令,然后加“=值”参数运行
    line_num=35        #声明一个数值型变量,值为35name='westnorth'   #声明一个字符串型变量,内容是westnorth
    除了这样声明变量外,还可以声明一个数值型变量为二进制、八进制或十六进制类型
    let "num_dec = 40"echo " the num is = $num_dec"   #输出结果为40,这是最普通的定义数值的方法,默认是十进制数值let "num_oct = 040"echo "oct = $num_oct"     #显示结果为32,这是定义八进制数值的方法,只需要在数字前面加上数字0即可let "hex = 0x40"echo "hex = $hex"   #显示结果为64,这是定义十六进制数值的方法。在变量的值前加上0x或0X即可

  2. 给变量赋一个数学表达式的值          如果要给变量赋一个数学表达式的值,就不能直接使用等号了。 使用“a=3+2”,并不会让a等于5,而是让a等于“3+2”,成为一个字符串。正确的方式应该是使用set关键字,
    set a=3+2set a1=3*3-$a

  3. 给变量赋一个命令的运行结果               
    b=$(ls -l)
    这样就将“ls -l”的运行结果赋予变量b。只要在标准输出中有输出内容的命令均可将其输出内容赋予一个变量。
  4. 使用变量     在shell提取变量,应使用操作符“$”。命令行中声明变量,然后引用变量的用法
    (1)声明变量***$ name='westnorth' (2)引用变量***$ echo $name(3)将ls -l命令的输出赋予变量content***$ content=$(ls -l)(4)引用变量content,将其显示出来***$ echo $content   #使用$content变量引用变量,注意这种方式引用变量,会消除所有回车标记(5)由于前面输出不理想,换种方式,将引用变量的代码用双引号括起来***$ echo "$content"#使用带双引号的$content引用变量,这种法师输出的内容保留了原有回车符。***$ echo '$content'  #如果使用单引号试图引用变量,则会出现如下结果$content
    有时候会出现普通文本与命令输出混合显示的情况,这种情况下输出命令有点特殊,
    1)定义一个变量,作为显示之用***$ num=182)使用前文所述方法引用变量***$ echo $numyears can smoke#如果要将变量值与普通文本混合显示,直接使用会出现错误,上述代码会指示shell去寻找一个名叫numyears的变量,如果用户并未定义该变量的话,显示 can smoke3)使用正确的方法显示文本与命令混合的情况***$ echo ${num}years can smoke#使用大括号将变量括起来,就可以混合显示变量与普通文本  18years can smoke

  5. 取消变量     unset命令
    ***$ name='westnorth'***$ echo "name=$name"***$ unset name     #取消变量***$ echo "name=$name"   name=            #显示该变量会得到一个空的输出结果

  6. 系统变量       参数位置变量  “$”后跟一个数字可获得脚本文件运行时输入的参数值。“$0”是当前脚本的文件名,然后“$1”是第一个参数,“$2”是第二个参数,依次类推。如果参数值多余9个,使用时需要加上大括号,如用${10}来获得第十个参数            $*: 将所有的参数作为一个单词来引用     $@: 与“$*“有相同的作用,但将每个参数作为一个单词来引用。这就意味着得到的引用是一个字符数组。
  7. 内部变量     
    • $?:得到命令、函数或者脚本的退出状态。
    • $$:当前运行的脚本文件的PID号。
    • $BASH:Bash程序的位置。
    • $BASH_VERSINF[n]:Bash程序的版本信息,如n=0,得到主版本号,如n=5,得到Bash的架构信息。
    • $FUNCNAME:当前函数名。
    • $GLOBIGNORE:一个文件名的模式匹配列表,如果在file globbing中匹配到的文件包含这个列表中的某个文件,那么这个文件将从匹配到的文件中去掉。
    • $GROUPS:当前用户所属组,这是一个数组文件,包含了当前用户所属所有的组。可以用“echo ${GROUPS[1]}”来得到其值。
    • $HOME: 用户的主目录。
    • $EDITOR:脚本默认的编辑器。一般为vi或emacs。
    • $HOSTNAME:显示当前机器的名称。
    • $HOSTTYPE:显示当前计算机的架构类型。如i486
    • $MACHTYPE:显示系统的硬件相关信息,一个可能的结果是i486-pc-linux-gun
    • $IFS:指定shell解析字符串时分隔单词的分隔符,默认是空格、TAB、回车等,可以修改其值。如字符串各单词间是用逗号分隔的,就可以使用“IFS=‘,’”指定将逗号作为新的单词分隔符。
    • $LINENO:得到当前行的行号。
    • $OSTYPE:操作系统类型,一个可能的输出是linux-gun
    • $PATH:指定可执行程序的路径。在脚本中引用外部命令时,就在这些路径中寻找可执行程序。其内容可能是“/home/westnorth/bin:/usr/local/sbin : /usr/local/bin:/usr/bin:/sbin: /bin:/usr/game”.PATH中可能有多个目录,个目录间用“:”隔开。
  8. 数组 
    declare -a array #第一种方法array[23]="BMW" #第二种方法
    使用$提取其值。${array[23]}
    #!/bin/bashdecalare -a arr1            #显示声明一个数组arr1[1]="abcd"               #给该数字的第1个元素赋初值array[11]=11;                 #直接定义一个数组,并同时将第11个元r赋值为11echo "array No.11 is ${array[11]}"  #显示两个数组的元素echo “unknow arr1 is ${arr1[2]}” #显示未赋值的元素  会显示一个空字符串




原创粉丝点击