shell脚本之函数和数组(含案例,适合练习)

一、shell函数

1.1、函数的定义

在这里插入图片描述

  • return返回的是状态码,需要使用$?调取

  • echo 返回的是值,使用变量调用

  • 传参:指位置变量

  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。

  • return后跟数值n(0-255)

1.2、调用函数的方法

  • 函数名 [参数1($1)] [参数2($2)]
  • 在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

1.3、shell函数应用

  • 求两个数的平方相加的结果
  • 比如: 5的平方加上6的平方
#!/bin/bash
read -p "请输入两个整数:" shu_1 shu_2

function  sqrt (){
  sum=$(expr $(expr $1 \* $1) + $(expr $2 \* $2))
}
sqrt $shu_1 $shu_2

二、数组

2.1、数组定义方法

  • 方法一:
基本格式
数组名=(value0 value1 value2...)
  • 方法二:
基本格式
数组名=([0]=value [1]=value [2]=value...)
  • 方法三:数组元素之间使用空格隔开
基本格式
列表名=“value0 value1 value2”
数组名=($列表名)
  • 方法四:
基本格式
数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”
...

2.2、数组操作

  • 获取数组长度
基本格式  ${#数组名[@/*]}
例如
[root@localhost opt]# abc=(10 20 30 40 50)
[root@localhost opt]# echo ${#abc[*]}
5
  • 读取某下标赋值
基本格式
${数组名[下标]}
例如
[root@localhost opt]# echo ${abc[0]}
10
[root@localhost opt]# echo ${abc[1]}
20
[root@localhost opt]# echo ${abc[1]}
20
[root@localhost opt]# echo ${abc[2]}
30
...
  • 获取数组的内容
基本格式  ${数组名[@]}
        ${数组名[*]}
             以上是把数组的内容一一单列出来
 例:
 [root@localhost opt]# echo ${abc[*]}
10 20 30 40 50 
  • 数组切片
    数组切片即读取数组的一部分
基本格式    ${数组名[@]:跳过的元素:元素个数}

例:从数组的第二个元素后面取,取3个元素
        ${name[*]:2:3}
这里的 2 指跳过的元素,3 指获取的元素个数

2.3、数组实例

  • 案例1:先输5个数放入数组,然后求出数组的最大值max
#!/bin/bash
for ((i=1;i<=5;i++));do
  read -p "请输入第$i个数字:" num
  abc[$i-1]=$num
done

max=${abc[0]}
for ((k=1;k<=${#abc[*]}-1;k++));do
  if [ $max -lt ${abc[$k]} ];then
   max=${abc[$k]}
  fi
done
echo "最大值是:$max"   
[root@localhost opt]# chmod +x max.sh 
[root@localhost opt]# ./max.sh 
请输入第1个数字:2
请输入第2个数字:3
请输入第3个数字:66
请输入第4个数字:33
请输入第5个数字:111
最大值是:111
  • 案例2:交互由用户用户随意输一个数组,求出最大值
#!/bin/bash 
read -p "请输入你的数组长度:" num1
for i in `seq $num1`
do
read -p "请输入$i个数:" shu
 number[$i-1]=$shu
done
echo ${number[*]}
max=${number[0]}
for((j=1;j<=${#number[*]}-1;j++))
do
    if [ ${number[j]} -gt $max ]
	then
	    max=${number[j]}
	fi
done
echo "最大值为$max"
发布了69 篇原创文章 · 获赞 32 · 访问量 3452

猜你喜欢

转载自blog.csdn.net/qq_28361541/article/details/103408013
今日推荐