美文网首页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