美文网首页Linux小推车
[LN_12] Shell编程-Shell数组的定义&使

[LN_12] Shell编程-Shell数组的定义&使

作者: Fighting_001 | 来源:发表于2019-02-14 00:25 被阅读75次

    目录结构

    一、Shell数组的定义&使用
        1. 定义数组
        2. 读取数组元素
        3. 获取数组的长度
        4. 案例:定义数组,以不同方式获取数组元素
    二、Shell函数的定义、调用
        1. Shell函数的定义
        2. Shell函数的调用
    三、函数参数
    

    一、Shell数组的定义&使用

    Bash Shell只支持一维数组,不支持多维数组。数组中可存放多个值,初始化时不需要定义数组大小,数组元素的下标从0开始。

    1. 定义数组

    语法格式:
    方式1

    array_name=(值1 值2 值3 ... 值n)
    

    方式2

    array_name[0]=值1
    array_name[1]=值2
    array_name[2]=值3
    ...
    array_name[n-1]=值n
    

    PS:Shell数组用小括号()表示,每个元素之间以空格" "进行分割

    2. 读取数组元素

    语法格式:

    ${array_name[index]}
    

    使用@*可获取数组中的所有元素:

    ${array_name[*]}
    ${array_name[@]}
    

    3. 获取数组的长度

    ${#array_name[*]}
    ${#array_name[@]}
    

    4. 案例:定义数组,以不同方式获取数组元素

    vim func-005.sh

    #!/bin/bash
    
    # 定义数组
    array_test=(A "B" C)
    
    # 输出数组的所有元素
    echo "【方式1】数组的元素为:${array_test[*]}"
    echo "【方式2】数组的元素为:${array_test[@]}"
    
    echo -e "【方式3】输出数组的所有元素:\n元素1:${array_test[0]}, 元素2:${array_test[1]}, 元素3:${array_test[2]}"
    
    echo "【方式4】列出数组的所有元素:"
    # 循环输出数组所有元素
    for((i=0;i<=${#array_test[*]-1};i=i+1))
        do
            echo "${array_test[i]}"
        done
    

    执行结果:

    二、Shell函数的定义、调用

    1. Shell函数的定义

    Linux Shell 可以用户定义函数,然后在Shell脚本中根据需要调用函数

    Shell函数的定义格式:

    [ function ] funname [()]
    {
        action;
        [return int;]
    }
    

    PS:
    ① 可以带function定义:function fun(),也可不带任何参数直接定义:fun()
    ② 参数返回,非必须。若写返回值,则以最后一条命令运行结果作为返回值;return后跟数值n(0-255)

    2. Shell函数的调用

    案例1:在Shell脚本中定义一个函数,并进行调用(不写return返回)

    vim func-001.sh

    #!/bin/bash
    
    # 定义函数 hiFunc()
    hiFunc(){
        echo "Hi, Linux Shell!"
    }
    
    # 调用以上函数(直接写函数名称)
    hiFunc
    

    赋权:chmod 755 func-001.sh
    执行:./func-001.sh

    执行结果:

    案例2:定义一个写有return返回的函数,实现调用用户的输入数字进行运算

    vim func-002.sh

    #!/bin/bash
    
    # 定义函数addFunc()
    addFunc(){
        read -p "请输入第1个整数:" num1
        read -p "请输入第2个整数:" num2
        result1=$(($num1+$num2))
        result2=$(($num1*$num2))
        echo "输入的2个整数之和为:$result1"
        # 编写返回值(返回值需要满足0-255之间的整数)
        return $result2
    }
    
    # 调用函数addFunc
    addFunc
    
    # 调用以上函数后,通过 $?获取函数返回值,即 $result2
    echo "输入2个数之乘积为:$?"
    

    执行结果:

    PS:
    ① 函数调用,仅需要用函数名称即可
    ② 在调用函数之后通过$?可获取对应函数的返回值
    ③ 在Shell脚本中需要先定义函数,再进行调用(即函数位于脚本最前面位置)
    ④ return返回的语法:return [n],n需要为0-255直接的数字。若为非数字or负数,则会提示语法错误;若n>255,则会根据周期性返回0-255之间的值(如:n=255,返回255;n=256,返回0;n=257,返回1)

    三、函数参数

    在Shell中调用函数时可向其传递参数。在函数体内部通过 $n 的形式来获取参数的值,如:$1表示第1个参数,$2表示第2个参数...;当n>=10时,表示为 ${n},如:${10}、${11}

    位置参数变量:是预定义变量中的一类变量

    位置参数变量 作用
    $n 利用参数向程序中传递需要调用的值
    n为数字,n≤9直接用数字,n≥10都需要用{}包含:
    $0表示命令本身
    $1-$9表示第1-9个参数
    ${10}表示第10个参数
    $* 表示命令行中所有的参数,所有参数看作一个整体
    $@ 表示命令行中的所有参数,每个参数区分对待
    $# 表示命令行中所有参数的个数(不统计$0)

    预定义变量

    预定义变量 作用
    $? 最后一次执行的命令所返回的状态:
    若变量值为0,说明上一个命令正确执行
    若变量值为非0,说明上一个命令执行不正确
    $$ 当前进程的进程号(PID)
    $! 后台运行的最后一个进程的进程号(PID)

    案例1:定义函数,实现在指定目录下,查找出以"if-"开头的所有.sh脚本名称,然后循环将这些名称输出

    vim func-003.sh

    #!/bin/bash
    
    # 定义函数paraOutput
    paraOutput(){
        echo "---输出以'if-'开头的.sh脚本名称---"
        for i in $(ls if-*.sh)
            do
                echo "$i"
            done
    }
    
    # 调用函数
    paraOutput
    

    执行结果:

    案例2:利用位置参数变量输出指定位置的脚本名称

    vim func-004.sh

    #!/bin/bash
    
    # 定义函数paraOutput
    paraOutput(){
        echo "当前目录下总共有.sh文件有$#个:"
        echo "第1个.sh文件为:$1"
        echo "第2个.sh文件为:$2"
        echo "第10个.sh文件为:${10}"
    }
    
    # 调用函数,向脚本传递查询获取的参数值
    paraOutput $(ls *.sh)
    

    参考资料:Shell 函数

    相关文章

      网友评论

        本文标题:[LN_12] Shell编程-Shell数组的定义&使

        本文链接:https://www.haomeiwen.com/subject/ptojeqtx.html