Shell编程学习之函数的应用

news2025/10/20 13:08:06
  • Shell编程中的函数:
  • 伪代码表示:
function 函数名(){

       函数体

}
  • 注意事项:

  • 1.函数无参数;

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

  • 3.function可以不写;

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

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

  • 函数的调用:

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

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

  • 函数内部使用的参数:

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

  • 1.$0:脚本名

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

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

  • 示例代码:

#!/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
  • 运行结果:
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:
#!/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:
#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:
#!/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:
******************************
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.可以使用命令置换符获取函数的返回值;
  • 示例代码:
#!/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
  • 运行结果:
144
******************************
99
******************************
1
  • 一维数组传递函数参数:
  • 实例要求:
  • 编写脚本,调用自定义函数,传递自定义数组的各个成员的值,并求和;
  • 测试代码:
#!/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
  • 运行结果:
66

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/904114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux命令200例:head用于显示文件的开头部分(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

2023-08-20 LeetCode每日一题(判断根结点是否等于子结点之和)

2023-08-20每日一题 一、题目编号 判断根结点是否等于子结点之和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&…

.fargo后缀勒索病毒|勒索病毒解密恢复|fargo勒索病毒解密|勒索病毒解密恢复|数据库恢复

fargo勒索病毒概述&#xff0c;fargo勒索病毒解密恢复及日常防护建议 目录&#xff1a; fargo勒索病毒介绍感染fargo勒索病毒后的表现fargo勒索病毒的感染形式如何恢复.fargo后缀勒索病毒fargo勒索病毒日常防护建议 简介&#xff1a; 河北某有限公司的财务系统&#xff0c;由…

下线40万辆,欧拉汽车推出2023款好猫尊荣型和GT木兰版

欧拉汽车是中国新能源汽车制造商&#xff0c;成立于2018年。截至目前&#xff0c;已经下线了40万辆整车&#xff0c;可见其在市场的影响力和生产实力。为了庆祝这一里程碑&#xff0c;欧拉汽车推出了品牌书《欧拉将爱进行到底》&#xff0c;在其中讲述了欧拉汽车的发展历程和未…

2000-2021年全国各省份农业碳排放数据(原始数据+测算过程+碳排放的测算结果)

2000-2021年全国各省份农业碳排放数据&#xff08;原始数据测算过程碳排放的测算结果&#xff09; 1、时间&#xff1a;2000-2021年 2、范围&#xff1a;全国31省市 3、指标&#xff1a;化肥使用量(万吨)、塑料薄膜使用量(吨)、农用柴油使用量&#xff08;万吨&#xff09;、…

数据结构 - 语句的频度和时间复杂度

一、语句频度&#xff1a; 算法的运行时间 Σ每条语句的执行次数X该语句执行一次所需的时间每条语句的执行次数&#xff0c;也称为&#xff1a;语句的频度结合上面两点&#xff0c;可知&#xff1a;算法的运行时间 Σ每条语句的频度X该语句执行一次所需的时间 二、语句执行…

【产品规划】功能需求说明书概述

文章目录 1、瀑布流方法论简介2、产品需求文档&#xff08;PRD&#xff09;简介3、产品需求文档的基本要素4、编写产品需求文档5、优秀产品需求文档的特点6、与产品需求文档相似的其他文档 1、瀑布流方法论简介 2、产品需求文档&#xff08;PRD&#xff09;简介 3、产品需求文档…

【汇编语言】使用DS和[address]实现字的传送

文章目录 要解决的问题&#xff1a;CPU从内存单元中读取数据字的传送 要解决的问题&#xff1a;CPU从内存单元中读取数据 1、要求&#xff1a;CPU要读取一个内存单元时&#xff0c;必须先给出这个内存单元的地址&#xff1b; 2、原理&#xff1a;8086设备中&#xff0c;内存地…

Kotlin开发笔记:函数式编程

Kotlin开发笔记&#xff1a;函数式编程 什么是函数式编程 简单来说&#xff0c;我们之前接触到的编程的主流就是命令式编程&#xff0c;我们需要告诉计算机做什么和如何做。而函数式编程的意思就是我们只需要告诉计算机我们想做什么&#xff0c;计算机会帮助我们实现如何做。我…

ubuntu20搭建环境使用的一下指令

1.更新源 sudo vim etc/apt/sources.listdeb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial maindeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates…

小素数,大智慧

小素数&#xff0c;大智慧 定义判断方法方法1方法2方法3方法4方法5方法6方法7 定义 素数&#xff08;质数&#xff09;&#xff1a;在大于 1 的自然数中&#xff0c;只有 1 和该数本身两个因数的数 素数&#xff08;质数&#xff09;&#xff1a;在大于1的自然数中&#xff0c;…

No114.精选前端面试题,享受每天的挑战和学习

文章目录 vue3中的ref、toRef、toRefs说明下TS的优缺点说下函数式组件说下函数式编程 vue3中的ref、toRef、toRefs 下面是对Vue 3中的ref、toRef和toRefs进行比较的表格&#xff1a; reftoReftoRefs参数类型值类型或引用类型响应式对象响应式对象返回值Ref 对象Ref 对象响应式…

简单认识Docker的资源控制

文章目录 一、CPU资源限制1.设置CPU使用率上限2.设置CPU资源占用比&#xff08;设置多个容器才有效&#xff09;3.设置容器与CPU绑核 二、内存资源限制三、对磁盘I/O配额的限制 一、CPU资源限制 1.设置CPU使用率上限 Linux通过CFS&#xff08;Completely Fair Scheduler&#…

【简单认识Docker基本管理】

文章目录 一、Docker概述1、定义2.容器化流行的原因3.Docker和虚拟机的区别4.Docker核心概念 二、安装docker三、镜像管理1.搜索镜像2.下载&#xff08;拉取&#xff09;镜像3.查看已下载镜像4.查看镜像详细信息5.修改镜像标签6.删除镜像7.导出镜像文件和拉取本地镜像文件8.上传…

如何在Linux系统上搭建自己的FRP内网穿透

前言 我有一个1核1G的服务器有公网IP但是这个1核1G的服务器太垃圾了,几乎什么都跑不起来,不过网速还行,那我本地还有一个物理主机是一个4核4G的,那我就可以把这台主机安装上linux系统当成一个服务器来使用,然后把网络代理到公网IP上.使用内网穿透这篇文章也就出现了. FRP简介 F…

服务器CPU飚高排查

排查思路 当正在运行的Java服务导致服务器的CPU突然飙高时&#xff0c;我们该如何排查定位到哪个接口的哪行代码导致CPU飙高的问题呢&#xff1f;我主要提供两个方案&#xff1a; jstackarthas 准备工作 代码准备 现在需要准备一段可以让服务器CPU飙高的代码以及把代码部署…

鑫达惠购系统APP开发的功能架构介绍

鑫达惠购是一款新电商模式的购物分销系统&#xff0c;基于分销裂变的商业价值行为&#xff0c;快速地分享邀请用户注册。这个系统的模式有个特别的亮点&#xff0c;基于全网公排的模式快速推动用户在商城上的购买活动。 鑫达惠购客户端系统功能 包含的功能有&#xff1a;商城模…

memset の 那些事儿 (C++)

如果你在编程时开了一个数组 int a[100010] 这是后你想把他全部赋值为一个很大的值&#xff08;可能你用它来取min&#xff09; 这时候&#xff0c;应该这样写 for (int i 0; i < 100010; i ) a[i] 0x3f3f3f3f //0x3f3f3f3f 是一个比较接近int_max的一个数&#xff0…

机器学习笔记 - 使用VGG16深度学习模型进行图像相似度比较

一、简述 VGG16 是一个强大的预训练模型,可用于识别图像之间的相似性。通过使用该模型,我们可以从不同图像中提取高级特征并进行比较以识别相似性。该技术具有广泛的应用,从图像搜索和推荐系统到安全和监控。 在本文中,将利用该模型来查找两个图像之间的相似性。 …

Win11游戏高性能模式怎么开

1、点击桌面任务栏上的“开始”图标&#xff0c;在打开的应用中&#xff0c;点击“设置”&#xff1b; 2、“设置”窗口&#xff0c;左侧找到“游戏”选项&#xff0c;在右侧的选项中&#xff0c;找到并点击打开“游戏模式”&#xff1b; 3、打开的“游戏模式”中&#xff0c;找…