函数与数组

简介: 函数(function),数学术语。其定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。

目录


函数 function


概念


定义函数


函数定义格式:


案例1:定义函数并通过函数名直接调用执行


案例2:函数的传参,位置变量


案例3:函数的传参,变量传递固定值


案例4:函数的传参,变量传递可变值


案例5:多值传参


案例6:多值传参计算


案例7:函数状态返回值echo、return


案例8:函数return返回值


案例9:输入的数值判断并返回相应值


案例10:列出系统所有用户


案例11:函数库调用


案例12:定义程序是否运行


数组


概念


创建格式


存数据


取数据


脚本取数据


增删改查



函数 function

概念

函数(function),数学术语。其定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。

定义函数

   命令的集合,用来完成特定的功能;                #功能

   提前定义函数,在脚本中任意调用函数名。        #任意调用

   使用函数使代码模块化,便于重复使用,增加可读性。        #重复调用,减少代码量

函数定义格式:

1. 函数名(){
2.     shell命令
3. }
4.     
5. 或
6. 
7. function 函数名 {
8.     shell命令
9. }

案例1:定义函数并通过函数名直接调用执行

1. vim fun1.sh
2. #!/bin/bash
3. fun1(){
4.     echo "这是第一种定义函数的方法"
5. }
6. 
7. function fun2 {
8.     echo "这是第二种定义函数的方法"
9. }
10. 
11. fun1
12. fun2

案例2:函数的传参,位置变量

1. vim fun2.sh
2. #!/bin/bash
3. fun1(){
4.     echo "hello $1"
5. }
6. 
7. function fun2 {
8.     echo "hello $*"
9. }
10. 
11. fun1 $1
12. fun2 $*

案例3:函数的传参,变量传递固定值

1. vim fun3.sh
2. #!/bin/bash
3. fun1(){
4.     echo "$i"
5. }
6. i=100
7. fun1

案例4:函数的传参,变量传递可变值

1. vim fun4.sh
2. #!/bin/bash
3. fun1(){
4.     echo "$i"
5. }
6. i=$1
7. fun1

案例5:多值传参

vim fun5.sh
#!/bin/bash
fun1(){
    echo "$1"
}
fun1 $1
fun1 $2
fun1 $3
vim fun5.sh
#!/bin/bash
fun1(){
    echo "$1" "$2" "$3"
}
fun1 $1 $2 $3
zh=$(fun1 $1 $2 $3)
echo "传参的值:$zh"


案例6:多值传参计算

vim fun6.sh
#!/bin/bash
fun1(){
    case $2 in
        +)
            echo $1 + $3 = $(( $1 + $3 ))
            ;;
        -)
            echo $1 - $3 = $(( $1 - $3 ))
            ;;
        x)
            echo $1 \* $3 = $(( $1 * $3 ))
            ;;
        /)
            echo $1 / $3 = $(( $1 / $3 ))
            ;;
    esac
}
fun1 $1 $2 $3

案例7:函数状态返回值echo、return

echo可以返回任何字符串结果,用于返回数据;

return只能返回1-255的整数值,通常用来表示状态:0成功、1失败


vim fun7.sh
#!/bin/bash
fun1(){
    echo 100
    return 1
}
result=$(fun1)
echo "函数的状态码是:$?"
echo "函数的返回值是:$result"
案例8:函数return返回值
vim fun8-1.sh
#!/bin/bash
file=/etc/passwd
fun1(){
    if [ -f $file ];then
        return 0
    else
        return 1
    fi
}
fun1
if [ $? -eq 0 ];then
    echo "$file 文件存在"
else
    echo "$file 文件不存在"
fi

案例9:输入的数值判断并返回相应值

要求:0-10返回0,10-20返回1,20-30返回2,其他返回3.


vim fun9.sh
#!/bin/bash
num(){
    read -p "请输入对应的数字:" sz
    if [ $sz -ge 0 -a $sz -lt 10 ];then
        return 0
    elif [ $sz -ge 10 -a $sz -lt 20 ];then
        return 1
    elif [ $sz -ge 20 -a $sz -lt 30 ];then
        return 2
    else    
        return 3
    fi
}
num
echo $?
vim fun8-2.sh
#!/bin/bash
pid=$$
nginx_run(){
    ps -ef |grep nginx |grep -v grep |grep -v $pid &> /dev/null
    if [ $? -eq 0 ];then
        return 0
    else
        return 1
    fi
}
nginx_run && echo "nginx is running" || echo "nginx is stopped"

案例10:列出系统所有用户

vim fun10.sh
#!/bin/bash
function get_users
{
    users=`cat /etc/passwd | cut -d: -f1`
    echo $users
}
user_list=`get_users`
i=1
for u in $user_list
do
    echo "The $i user is : $u"
    let i++
done


案例11:函数库调用

vim /root/base_function
function add
{
    echo "`expr $1 + $2`"
}
function reduce
{
    echo "`expr $1 - $2`"
}
function multiple
{
    echo "`expr $1 \* $2`"
}
function divide
{
    echo "`expr $1 / $2`"
}
function sys_load
{
    echo "cpu load"
    echo 
    sar -u
    echo 
    echo "memory info"
    echo 
    sar -r
    echo 
    echo "disk usage"
    echo
    sar -B
    echo 
}
vim fun11.sh
#!/bin/bash
. /root/base_function
add 10 20
reduce 90 30
multiple 12 12
divide 12 2
sys_load


案例12:定义程序是否运行

#!/bin/bash
pid=$$
fun(){
        ps -ef |grep nginx |grep -v grep |grep -v ${pid} &> /dev/null
        if [ $? -eq 0 ];then
                return 0
        else
                return 1
        fi
}
fun
if [ $? -eq 0 ];then
        echo "nignx 已运行!"
else
        echo "nignx 已关闭!"
fi

数组

概念

可以看成变量,变量一般只能存储一个值,数组可以存储多个值。

创建格式

存数据

names=( zhangsan lisi wangwu zhaoliu)


names[0]=huangting


read -a ages-p "请输入年龄:"         #有提示信息定义方法



以整个数组长度为下表


names[${#names[@]}]=sisi         ##往最后一行增加数据


取数据

echo ${names[0-n]}


echo ${names[@]}         ##查看诉诸里的所有数据


echo ${names[*]}


echo ${#names[@]}         ##统计所有数据的个数


echo ${!names[@]}         ##获取数组中所有元数的索引下标

脚本取数据

1. #!/bin/bash
2. names=(zhangsan lisi chenwu zhaoliu)
3. for ((i=0;i<4;i++))
4. do
5. echo ${names[i]}
6. 
7. done

增删改查

#!/bin/bash
names=(zhangsan lisi chenwu zhaoliu)
index=-1
list(){
        for ((i=0;i<${#names[@]};i++))
        do
                echo ${names[i]}
        done
}
find(){
        read -p "请输入姓名:" name
        for((i=0;i<${#names[@]};i++))
        do
                if [ ${names[$i]} == ${name} ];then
                        index=${i}
                        break
                fi
        done
        echo ${index}
}
add(){
read -p "请输入用户名:" name
names[${#names[@]}]=${name}
echo "用户${name}已经添加成功!新的列表为:"
list
}
chage(){
        i=$(find)
        read -p "请输入新的名字:" new
        names[$i]=${new}
        echo "修改成功,修改后如下:"
        list
}
del(){
        i=$(find)
        names[$i]=
        echo "删除成功,修改后菜单如下:"
        list
}
while true
do
cat << END
欢迎使用本系统
1.添加用户
2.查找用户
3.修改用户
4.删除用户
5.退出系统
END
read -p "请选择操作:" n
case $n in
        1)
                list
                add
                ;;
        2)
                i=$(find)
                if [ ${i} -ne -1 ];then
                        echo "用户已找到"
                else
                        echo "用户未找到"
                fi
                ;;
        3)
                list
                chage
                ;;
        4)
                list
                del
                ;;
        5)
                echo "感谢使用"
                exit
                ;;
        *)
                echo "请输入正确选项 "
                exit
                ;;
esac
done



相关文章
|
16天前
从一个数组中拿到另一个数组中的值
从一个数组中拿到另一个数组中的值
|
5月前
数组相关方法?
数组相关方法?
|
2天前
|
Python
使用arange()函数创建数组
使用arange()函数创建数组。
11 3
|
5月前
|
前端开发
数组常用的几个方法
数组常用的几个方法
21 0
|
7月前
|
搜索推荐 编译器 C++
C++基础:第5~6章:数组\函数
C++基础:第5~6章:数组\函数
36 0
|
8月前
数组的相关方法
数组的相关方法
24 0
数组作为函数参数传参&数组名到底代表什么意义?
数组作为函数参数传参&数组名到底代表什么意义?
|
10月前
|
C语言
函数+数组
c语言学习第四弹
二维数组的初始化,下标,遍历,及数组间的赋值
下标: 行下标与列下标都是从0开始。 例如:int a[3][2] = { { 1,2 } , { 3,4 } , { 5,6 } }; 行下标:0 1 2 列下标:0 1 元素表现为: a [0][0] a [0][1] a [1][0] a [1][1] a [2][0] a [2][1] 另一个角度:
213 0
|
C语言 索引
从函数返回数组
从函数返回数组
90 0