shell脚本变量,数组与函数

来源:互联网 发布:php垃圾回收机制 编辑:程序博客网 时间:2024/05/21 19:47

        • 一变量
          • 1变量的定义
          • 3变量的作用域
          • 3系统变量
        • 二数组
          • 1定义数组
          • 2获取数组长度 arr
          • 3获取所有元素 arr
          • 4截取部分元素 arrstartlength
          • 5替换数组元素的值 arrvalreplace
          • 6删除数组以及元素 unset arrunset arrn
          • 7赋值数组 newarrarr
          • 8链接数组newarrarr1arr1 arr2两数组中间有空格
          • 8加载文件内容到数组arrcat filename
        • 三函数
          • 1函数的定义
          • 2函数的调用
          • 3返回值 可以用return返回但是只能返回0-255之间的数
          • 4函数的参数
          • 5函数库文件的使用使得代码可以重用

(一)变量

(1)变量的定义
##等号两边不能有空格value=123value="jing"declare -i value=100
(3)变量的作用域
  • 局部变量
    • 需要使用local 定义
  • 全局变量

例如:

#! /bin/bashfunc(){    echo "global v1 is $v1" #输出200全局变量    local v1=100 #局部变量只在函数内有效    echo local v1 is $v1  #输出100}vi=200funcecho global v1 is $v1  #输出200
(3)系统变量

但对脚本进行传参时,参数的值存放在系统变量中。

  • $* 以“参数1” ”参数2“ “参数3”….的形式返回
  • $#
  • $@ 以“参数1 参数2 参数3….” 的形式返回
  • $num num是数字,代表第num个参数
  • $? 前一个命令或者函数的状态码
  • $$ 返回本进程的ID

(二)数组

(1)定义数组
  • 直接定义
    • arr[0]=”jing”
    • arr[1]=”ti”
  • declare
    • declare -a arr
  • 元素值集合
    • arr=(v0 v1 v2 ….)
  • 通过键值
    • arr=([0]=”one” [1]=”two” ….)
(2)获取数组长度 ${#arr[@]}
(3)获取所有元素 ${arr[@]}
(4)截取部分元素 ${arr[@]:start:length}
(5)替换数组元素的值 ${arr[@]/val/replace}
(6)删除数组以及元素 unset arr,unset arr[n]
(7)赋值数组 newarr=(“${arr[@]}”)
(8)链接数组newarr=(“arr1[@]""{arr2[@]}”)两数组中间有空格。
(8)加载文件内容到数组arr=($(cat “filename”))

(三)函数

(1)函数的定义
function function_name(){    statement     ...}

function_name(){    statement     ...}
(2)函数的调用
function_name 参数1 参数2 .....
(3)返回值 可以用return返回,但是只能返回0-255之间的数。

例如:

#! /bin/bashfunc(){    val=$((11+22))    return $val}func echo $? #系统变量获得返回值
(4)函数的参数

例如:

#! /bin/bashfunc(){    val=$(($1+$2)) #如果函数参数超过9时,要使用$(10)才行    return $val}func 22 33  #传递参数echo $? #系统变量获得返回值

如果参数太多可以使用shift移动参数,其功能是将参数向左边移动一位,同时删除原来的第一个参数,因此没次shift一次$#就减去1。
例如:

#! /bin/bashfunc(){    while (($# > 0))    do        echo $(1)        shift    done    }func  0 1 2 3 5 6 7 8 9 10  #传递参数

有时候参数太多并需要分情况,这时候单纯的传参就不能满足需求了。此时需要另外一个函数来获得参数getopts().
一般形式:getopts optstring args
【optstring】形如”a:b:c” 如果字母后面跟冒号则说明可以为该选项提供参数值。同时该参数值保存到系统变量$OPTARGS中。

例如:

 #! /bin/bash func() {     while getopts "a:b:c" args     do         case $args in             a)                 echo a‘s argument is $OPTARG                 ;;             b)                 echo b‘s argument is $OPTARG                 ;;             *)                 echo "having no argument "                 ;;         esac     done } func -a hello -b world
输出为:a‘s argument is hellob‘s argument is world
(5)函数库文件的使用,使得代码可以重用

例如test1.sh:

#! /bin/bashfun(){    if [ $1 -gt $2 ]    then        return $1    else    {        return $2    }    fi}     

这个脚本函数是比较两个数的大小,在另一个脚本中调用这个这个函数:

#! /bin/bash. test.sh #加入库文件fun 44 22 #直接调用函数echo $? 

一般吧脚本文件放入一个固定的区域,当调用时使用相对路径或者是绝路径才能笑到脚本库。