shell脚本 ( 函数 数组 冒泡排序)

目录

 什么是函数

使用函数的方法

格式

注意事项

函数的使用

函数可以直接使用

函数变量的作用范围

函数返回值

查看函数

删除函数

函数的传递参数

使用函数文件

​编辑

拓展递归函数

例:求5的阶乘 

什么是数组

使用数组的方法

1.先声明

2.定义数组

3.查看数组

显示数组值个数

显示数组全部下标

4.调用数组 

5.删除数组

数组切片

遍历数组(可以用来随机点名)

随机数比较大小

​编辑

冒泡排序


 什么是函数

在Linux中,函数是一个可重复使用的代码块,用于执行特定任务。函数通常被定义为一个具有特定名称的代码块,并可以接受输入参数和返回值。通过使用函数,可以将代码分解为更小的逻辑块,提高代码的可读性、可维护性和重用性

函数是脚本的别名

使用函数可以避免代码重复,增加可读性

使用函数的方法

1.定义函数

2.引用函数

格式

1.函数名() {

  脚本

}

2.function 函数名() {

脚本

}

3.function 函数名 (

注意事项

1.直接写 函数中调用函数 直接写函数名

2.同名函数 后一个生效

3.调用函数一定要先定义

4.每个函数是独立

函数的使用

函数可以直接使用

a() { cd /qqq;ls;}  #定义函数a


 

函数变量的作用范围

name=

local name= (函数名)

local    关键词 可以让变量只在函数中生效,

不会影响外界环境

函数返回值

如果使用函数

$? 使用就会受限

我们使用 return 自定义$?的返回值来判断 

函数中的命令是否成功

user () {
if [ $1 = root ]
then
echo "你好管理员"
return 30   #是管理员返回值为30
else
echo "你不是管理员"
return 20   #不是管理员返回值为20
fi
}
user $1
echo $?

查看函数

declare -f  函数名

[root@localhost/qqq] # declare -f qwer  #查看qwer函数
qwer () 
{ 
    cd /qqq;
    ls --color=auto
}

删除函数

ufunc_name

[root@localhost/qqq] # qwer      #函数qwer可以调用
10.sh       2.sh  7.sh  f.sh       random_data
11.sh       3.sh  8.sh  hostoff    v.sh
12.sh       4.sh  9.sh  hoston     x.sh
1.sh        5.sh  b.sh  mv.sh      xxx.txt
2023-11-21  6.sh  c.sh  name1.txt  z.sh
[root@localhost/qqq] # unset func_name qwer  #删除函数qwer
[root@localhost/qqq] # qwer  #无法调用
bash: qwer: 未找到命令...

函数的传递参数

需注意

脚本 $1 $2

函数$1 $2

是没有关系

函数的$1 $2 是指跟在函数后面的值

#!/bin/bash
sum1 (){
echo $1 
echo $2
}


sum1 $2 $1

使用函数文件

ostype (){          #定义函数
   if  grep -i -q "linux 6" /etc/os-release
   then
   echo "centos6"
   elif grep -i -q "linux 7" /etc/os-release
   then
   echo "centos7"
   elif grep -i -q "linux 8"  /etc/os-release
   then
   echo "centos8"
  else
  echo  "not linux"
  fi
  }

拓展递归函数

函数自己调用自己本身的函数

阶乘

例:求5的阶乘 

4的阶乘结果*5

3的阶乘结果*4

2的阶乘结果*3

1的阶乘结果*2

1的阶乘结果就是1

#!/bin/bash
sum=1
read -p "请输入一个数字:" num
for i in `seq $num`
do
let sum=$[i*sum]
done
echo $sum


fact() {
  if [ $1 -eq 1 ]
  then
    echo 1
  else
   local temp=$[$1 - 1]
   local result=$(fact $temp)
   echo $[$1 * $result]
fi
}
read -p "请输入:" n
fact $n

什么是数组

在Linux中,数组是一种数据结构,它用于存储一系列有序的元素。数组是一种线性数据结构,它可以用来存储相同类型的元素,这些元素按照顺序排列,每个元素都有一个唯一的索引,从0开始。

使用数组的方法

1.先声明

declare -a    普通数组 (不需要手动声明,系统帮你声明好了的)

declare -A    数组名      (关联数组一定要手动声明)

2.定义数组

1.数组名= (数组值,中间用空格隔开)

[root@localhost~] # xxx=( 10 20 30 )

2.数组名 [下标1] =值1

   数组名 [下标2] =值2

  ................

数组名 [下标n] 值n

3.查看数组

echo  ${数组名[@]}            echo ${数组名[*]}

[root@localhost~] # echo ${xxx[*]}     #xxx为数组名
10 20 30
[root@localhost~] # echo ${xxx[@]}
10 20 30

显示数组值个数

echo  $ {#数组名[@]}        echo ${#数组名[*]}        

[root@localhost~] # echo ${#xxx[@]}   #数组名为xxx
3
[root@localhost~] # echo ${#xxx[*]}
3

显示数组全部下标

echo ${!数组名[@]}       echo ${!数组名[*]}

[root@localhost~] # echo ${!xxx[@]}
0 1 2
[root@localhost~] # echo ${!xxx[*]}
0 1 2

4.调用数组 

单个调用 echo ${数组名[0]}     调用第一个值    (调用数组值从0开始为第一个值)

[root@localhost~] # xxx=( 10 20 30 )  #定义数组

[root@localhost~] # echo ${xxx[0]}    #调用第一个数组
10
[root@localhost~] # echo ${xxx[1]}   #调用第二个数组
20
[root@localhost~] # echo ${xxx[2]}    #调用第三个数组
30

5.删除数组

unset  数组名   

[root@localhost~] # unset xxx
[root@localhost~] # echo ${xxx[@]}

单个删除 unset 数组名 [0下标]   (删除数组值从0开始为第一个值)

[root@localhost~] # xxx=(10 20 30)   #定义数组xxx
[root@localhost~] # echo ${xxx[@]}   #查看数组
10 20 30
[root@localhost~] # unset xxx[0]     #删除数组第一个值
[root@localhost~] # echo ${xxx[@]}   #查看数组
20 30

数组切片

echo ${数组名[@]:2:2}   (跳过前面2个往后取2个)

[root@localhost~] # a=(10 20 30 40 50 60)  #定义数组
[root@localhost~] # echo ${a[@]:2:2}   #跳过前面2个往后取2个
30 40
[root@localhost~] # echo ${a[@]:3:3}    #跳过前面3个取后面2个
40 50 60

遍历数组(可以用来随机点名)

#!/bin/bash  

# 定义一个数组  
a=(apple banana orangen rape kiwi)
b=$(echo $[RANDOM%5])   #随机数
# 遍历数组并输出每个元素  
echo "${a[$b]}"

随机数比较大小

#!/bin/bash
for i in {0..9}    #变量i在0到9之间循环
do
a[$i]=$RANDOM            #建立数组a ,变量i是下标对应一次建立随机的数组值
[ $i -eq 0 ] && min=${a[0]} && max=${a[0]}   #当下标为0时,定义其对标的数组值同时为最大和最小
[ ${a[$i]} -gt $max ] && max=${a[$i]}
[ ${a[$i]} -lt $min ] && min=${a[$i]}     
 #当下标为1时,下标对应的随机数会与当前的最大值与最小值作比较。比最大值大的,为最大值,比最小值小的,则为最小值。
done
echo "所有随机数为:${a[*]}"
echo "最大数为:$max"
echo "最小数为:$min"

冒泡排序

双重循环

内循环比较相邻数的大小找到最大数

#!/bin/bash
#生成一个随机数组

for  i  in {0..9}
do
  a[$i]=$RANDOM
done

echo "原始数组为: ${a[@]}"

l=${#a[@]}
#定义变量l为数组a的长度10
for((i=1;i<$l;i++))
#需要比较的轮次   
do
   for ((j=0;j<$l-$i;j++))
   #相邻的数需 要比较的次数
   do
   first=${a[$j]}
   #数组的第一个数  
   k=$[$j+1]
   #计算数组 下一个数的 下标   
   second=${a[$k]}
   #下一个数
   if [ $first  -gt  $second ]
   #如果第一个数大于第二个数
   then
   temp=$first
   a[$j]=$second   
   #第二个数就为下一次比较的第一个数 
   a[$k]=$temp
   #第一个数就成为第二大的数
   fi
   done
done

echo "排序后的数组:  ${a[@]}" 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MQTT客户端MQTT.fx 1.7.1下载、安装和界面介绍

MQTT.fx是一款基于Eclipse Paho&#xff0c;使用Java语言编写的MQTT客户端工具。支持通过Topic订阅和发布消息&#xff0c;用来前期和物理云平台调试非常方便。 1.下载 1.1.访问官方下载地址下载&#xff0c;但是下载不到1.7.1版本 1.2.在连接网页末尾点击立即下载&#xff0c;…

思维模型 古烈治效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。见异思迁。 1 古烈治效应的应用 1.1 古烈治效应之心理学研究 在一项研究中&#xff0c;研究者让男性和女性参与者分别观看一系列异性的照片&#xff0c;并评估他们的吸引力。在观看完所有…

(三) Windows 下 Sublime Text 3 配置Python环境和Anaconda代码提示

一&#xff1a;新建一个 Python3.7 编译环境。 1 Tools--Build System--New Build System... 修改前&#xff1a; 修改后&#xff1a; 内容&#xff1a; {"cmd":["C:\\Python\\Python37-32\\python.exe","-u","$file"],"file_r…

Java基于springboot+vue开发服装商城小程序

演示视频&#xff1a; 小程序 https://www.bilibili.com/video/BV1rM411o7m4/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV1fc411D7V3/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae…

CV计算机视觉每日开源代码Paper with code速览-2023.11.21

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】Multi-entity Video Transformers for Fine-Grained Video Representation Learning 论文地址&…

WordPress最廉价优化整站的加载速度

为什么说一个站不优化就等于一个人做整个团队的事务导致项目进展慢&#xff0c;网站也是如此 图片、静态文件、php分离加速&#xff0c;加载速度并不是很快但是很协调比单个网站加载速度快许多 一、图片单域名加载设置上传文件路径和域名 以下代码添加在主题目录&#xff1a;fu…

大数据基础 HDFS客户端操作

一、Maven概述 Maven是一个专门用于管理和构建Java项目的工具。我们之所以要使用Maven&#xff0c;是因为Maven可以为我们提供一套标准化的项目结构、一套标准化的构建流程和一套方便的依赖管理机制&#xff0c;这些功能可以使得我们的项目结构更加清晰&#xff0c;导入jar包的…

Effective Modern C++(1.顶层const与底层const)

1.顶层const与底层const的定义 const修饰的变量不可以改变&#xff0c;那么他就是顶层const&#xff0c;如&#xff1a; const int a 10; 那么&#xff0c;对于 const int *const p new int(10); 第二个const就是顶层const&#xff0c;因为他修饰的是p&#xff1b;第一个…

容器技术——Cgroup

目录 容器技术容器技术概述要区分好共享与隔离的概念容器技术的三大核心容器对比虚拟机 namespaceUnionFs容器操作系统的来源操作系统的来源完整操作系统的镜像docker image是什么&#xff1f;如何构成的 如何为容器安装操作系统UnionFS&#xff08;联合文件系统&#xff09;的…

23.11.26日总结

图片与文字顶部对齐&#xff1a; <div class"addDishImgBox"><span class"addDishImgZi">商品图片&#xff1a;</span><img :src"myStorePhoto" class"addDishImg"> </div> .addDishImgBox{display: f…

【智能算法】基于黄金正弦和混沌映射思想的改进减法优化器算法

减法优化器&#xff08;Subtraction-Average-Based Optimizer&#xff0c;SABO&#xff09;是2023年刚出的智能优化算法。目前知网中文期刊基本搜不到&#xff0c;并且可以遇见未来一年文章也很少。SABO算法原理简单&#xff0c;算上初始化粒子&#xff0c;总共不超过6个公式。…

女生儿童房装修:原木上下铺搭配粉色调。福州中宅装饰,福州装修

你是否正在为女生儿童房的装修而发愁呢&#xff1f;该如何让房间既适合孩子生活&#xff0c;又能够满足日常学习的需要呢&#xff1f;这里有一个精美的装修案例&#xff0c;或许能够为你提供一些灵感。 1️⃣ 原木上下铺 房间的上下铺采用了原木色调&#xff0c;带来了自然、温…

网络爬虫(Python:Requests、Beautiful Soup笔记)

网络爬虫&#xff08;Python&#xff1a;Requests&#xff09; 网络协议简要介绍一。OSI参考模型二、TCP/IP参考模型对应关系TCP/IP各层实现的协议应用层传输层网络层 HTTP协议HTTP请求HTTP响应HTTP状态码 Requests&#xff08;Python&#xff09;Requests模块支持的http方法GE…

探索深度学习:从理论到实践的全面指南

探索深度学习&#xff1a;从理论到实践的全面指南 摘要&#xff1a; 本文旨在提供一个关于深度学习的全面指南&#xff0c;带领读者从理论基础到实践应用全方位了解这一技术。我们将介绍深度学习的历史、基本原理、常用算法和应用场景&#xff0c;并通过Python代码示例和Tens…

Python | CAP - 累积精度曲线分析案例

CAP通常被称为“累积精度曲线”&#xff0c;用于分类模型的性能评估。它有助于我们理解和总结分类模型的鲁棒性。为了直观地显示这一点&#xff0c;我们在图中绘制了三条不同的曲线&#xff1a; 一个随机的曲线&#xff08;random&#xff09;通过使用随机森林分类器获得的曲线…

docker基础学习笔记

文章目录 Docker简介Linux下安装DockerDocker常用命令Docker网络Docker存储docker-composedockerfile制作镜像私有仓库镜像导入导出参考 Docker简介 定义&#xff1a;Docker是一个开源的应用容器引擎优势&#xff1a; 一键部署&#xff0c;开箱即用&#xff1a;容器使用基于im…

openlayers+jsts 实现对行政区以外的区域进行遮罩(兼容多面的情况,兼容不同的ol版本)

先抛效果图,该区域有很多个小面 之前在网上搜到的方式实现 Openlayers 为目标范围以外的区域添加遮罩 - 知乎 核心代码如下&#xff0c;如果您不需要兼容全国的所有省市&#xff0c;而刚好要加地区又是连贯的区域的话&#xff0c;该方法可行&#xff0c;但是如果需要兼容全国…

微服务实战系列之Nginx(技巧篇)

前言 今天北京早晨竟然飘了一些“雪花”&#xff0c;定睛一看&#xff0c;似雪非雪&#xff0c;像泡沫球一样&#xff0c;原来那叫“霰”。 自然中&#xff0c;雨雪霜露雾&#xff0c;因为出场太频繁&#xff0c;认识门槛较低&#xff0c;自然不费吹灰之力&#xff0c;即可享受…

HarmonyOS开发(七):构建丰富页面

1、组件状态管理 1.1、概述 在应用中&#xff0c;界面一般都是动态的。界面会根据不同状态展示不一样的效果。 ArkUI作为一种声明式UI&#xff0c;具有状态驱动UI更新的特点&#xff0c;当用户进行界面交互或有外部事件引起状态改变时&#xff0c;状态的变会会触发组件的自动…

大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异

最近有客户在使用 Elasticsearch 搜索服务时发现集群有掉节点&#xff0c;并且有 master 收集节点信息超时的日志&#xff0c;节点的负载也很高&#xff0c;不只是 data 节点&#xff0c;master 和协调节点的 cpu 使用率都很高&#xff0c;看现象集群似乎遇到了性能瓶颈。 查看…