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
相关推荐
饥饿的半导体10 分钟前
Linux快速入门
linux·运维
BD_Marathon20 分钟前
Ubuntu:Tomcat里面的catalina.sh
linux·ubuntu·tomcat
BD_Marathon20 分钟前
设置LInux环境变量的方法和区别_Ubuntu/Centos
linux·ubuntu·centos
Me4神秘24 分钟前
Linux国产与国外进度对垒
linux·服务器·安全
zhaowangji40 分钟前
ubuntu 20.04 安装中文输入法 (sougou pin yin)
linux·ubuntu
老纪的技术唠嗑局1 小时前
OceanBase PoC 经验总结(二)—— AP 业务
数据库
两斤半1 小时前
Debian TTY环境乱码
linux·debian
阿里云大数据AI技术2 小时前
OpenSearch 视频 RAG 实践
数据库·人工智能·llm
MingYue_SSS2 小时前
开关电源抄板学习
经验分享·笔记·嵌入式硬件·学习
还是奇怪2 小时前
Linux - 安全排查 2
linux·运维·安全