Shell编程学习之函数的应用

  • Shell编程中的函数:
  • 伪代码表示:
powershell 复制代码
function 函数名(){

       函数体

}
  • 注意事项:

  • 1.函数无参数;

  • 2.函数无返回值类型;

  • 3.function可以不写;

  • 4.函数不被调用,就不会执行;

  • 5.函数名不能使用关键字名称,由数字、字母或下划线组成,且数字不能作为函数名的开头;

  • 函数的调用:

  • 1.无参数时,直接使用函数名即可;

  • 2.有参数时,函数名后跟着参数,多个参数用空格分隔;

  • 函数内部使用的参数:

  • 需要利用位置变量来使用参数;例如:

  • 1.$0:脚本名

  • 2.$1~$9:调用函数时,给函数传递的第1至第9个参数

  • 十位数及其上:需要添加花括号{ },比如:${88}

  • 示例代码:

powershell 复制代码
#!/bin/bash

function print_string(){
    for((i=0;i<6;i++))
    do

        echo "WELCOME TO BEIJING $i"
    done

}

print_string

echo "---------------------------------"

function my_mul(){
    echo $0
    echo $1
    echo $2
    expr $1 \* $2
}

my_mul 12 12
  • 运行结果:
powershell 复制代码
WELCOME TO BEIJING 0
WELCOME TO BEIJING 1
WELCOME TO BEIJING 2
WELCOME TO BEIJING 3
WELCOME TO BEIJING 4
WELCOME TO BEIJING 5
---------------------------------
g5.sh
12
12
144
  • 虚拟机终端传递函数参数:
  • 1.若使用执行脚本的命令行参数,调用函数时,传递参数,如示例代码1所述;
  • 2.如使用命令行的所有参数,如示例代码2所述,可以采用以下4种方式
  • i.$@ :根据单词列表的个数,在终端写多少参数进行传递;
  • ii.$*:同上;
  • iii."$@":同上;
  • iv."$*":使用命令行的所有参数,在函数中,使用$1即可;
  • 示例代码1:
powershell 复制代码
#!/bin/bash

function my_string(){

    echo "HI zhengzhou $1"
    echo "HI zhengzhou $2"
    echo "HI zhengzhou $3"
    echo "HI zhengzhou $4"
    echo "HI zhengzhou $5"
    echo "HI zhengzhou $6"
    echo "HI zhengzhou $7"
    echo "HI zhengzhou $8"
    echo "HI zhengzhou $9"
    echo "HI zhengzhou ${10}"
}
my_string $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} 
my_string ${10} $9 $8 $7 $6 $5 $4 $3 $2 $1 
  • 运行结果1:
powershell 复制代码
#linux@ubuntu:~$ bash g6.sh 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1
HI zhengzhou 1
HI zhengzhou 2
HI zhengzhou 3
HI zhengzhou 4
HI zhengzhou 5
HI zhengzhou 6
HI zhengzhou 7
HI zhengzhou 8
HI zhengzhou 9
HI zhengzhou 10
HI zhengzhou 10
HI zhengzhou 9
HI zhengzhou 8
HI zhengzhou 7
HI zhengzhou 6
HI zhengzhou 5
HI zhengzhou 4
HI zhengzhou 3
HI zhengzhou 2
HI zhengzhou 1
  • 示例代码2:
powershell 复制代码
#!/bin/bash

function my_para(){

    for i in $1 $2 $3 $4 $5
    do
       echo $i
    done
}

echo "******************************"
my_para $@
echo "******************************"
my_para $*
echo "******************************"
my_para "$@"
echo "******************************"

function my_para1(){

    for i in $1
    do
       echo $i
    done
}
my_para "$*"
  • 运行结果2:
powershell 复制代码
******************************
11
22
33
44
55
******************************
11
22
33
44
55
******************************
11
22
33
44
55
******************************
11
22
33
44
55
  • 函数的返回值:
  • 1.Shell编程中所有的变量默认都是全局的,函数内部的变量在函数调用完成后,是可以直接访问的,除了local关键字修饰的函数内部的变量,其他的变量都可以作为函数运行的结果的方式;
  • 2.可以使用return关键字返回;
  • 3.可以使用命令置换符获取函数的返回值;
  • 示例代码:
powershell 复制代码
#!/bin/bash

function my_mul(){

   KEY1=$(( $1 * $2 ))


}

my_mul 12 12
echo $KEY1

echo "******************************"
function my_sub(){

   echo $(( $1 - $2 ))


}
function my_mod(){

   echo $(( $1 % $2 ))


}

KEY2=$(my_sub 199 100)
echo $KEY2
echo "******************************"
KEY3=`my_mod 100 3`
echo $KEY3
  • 运行结果:
powershell 复制代码
144
******************************
99
******************************
1
  • 一维数组传递函数参数:
  • 实例要求:
  • 编写脚本,调用自定义函数,传递自定义数组的各个成员的值,并求和;
  • 测试代码:
powershell 复制代码
#!/bin/bash

SUM=0
function my_Sum(){

   for i in $1 $2 $3
   do
      SUM=$(($SUM+$i))
   done
   echo $SUM


}

A1=([0]="11" [1]="22" [2]="33")
KEY=$(my_Sum "${A1[@]}")
echo $KEY
  • 运行结果:
powershell 复制代码
66
相关推荐
June bug9 小时前
【高频SQL基础版】排序和分组
数据库·sql
珠海西格9 小时前
光伏电站全景感知体系:数据采集与设备状态监测技术
大数据·运维·服务器·数据库·人工智能
听风吹雨yu9 小时前
STM32F407-MD5码计算/Digest认证计算
stm32·单片机·嵌入式硬件
yugi9878389 小时前
RN8302B电表芯片驱动开发指南(基于SPI通信)
驱动开发·单片机·嵌入式硬件
爱基百客9 小时前
从人鼠到植物:SEdb 3.0数据库一站式检索与分析超级增强子调控网络
数据库·国自然·转录因子·组蛋白修饰·增强子
prettyxian9 小时前
【linux】进程控制(1):从fork创建到wait回收
linux
来来走走9 小时前
rocky linux 9.7安装mysql 8.4+
linux·数据库·mysql
大黄说说9 小时前
深入理解 Linux 权限机制:文件、用户与访问控制全解析
linux·运维·服务器
小生不才yz10 小时前
shell编程 - 条件测试
linux
怣5010 小时前
MySQL多表连接完全指南:内连接与外连接超详细讲解
数据库·sql·mysql