shell 函数和数组

目录

1.什么叫函数

1.函数的定义

基本格式

2查看函数 

查看函数列表

查看函数具体的定义

判断操作系统版本 

3.删除函数

4.函数的返回值

写一个倍数的脚本

5.函数的传参数 

 6.使用函数文件

 7.函数递归

函数调用自己本身的函数

 阶乘

2.数组 

定义数组格式

数据切片

冒泡排序

排列组合


1.什么叫函数

函数,脚本的别名

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

1.函数的定义

基本格式

1.函数名 () {
脚本

}

2.function 函数名 () {

脚本

}

3.function 函数名{

}

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

同名函数 后一个生效

调用函数一定要先定义

每个函数是独立

2查看函数 

查看函数列表

declare -F

查看函数具体的定义

declare -f

判断操作系统版本 

cat /etc/os-release

3.删除函数

unset 函数名

 

4.函数的返回值

return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

原则

函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码

退出码必须是0-255,超出的值将为除以256取余

如果使用函数,那么$?使用就会受限,我们可以使用return自定义$?的返回值

写一个倍数的脚本

vim cg.sh

#!/bin/bash
test1 () {
        read -p "请输入一个数字:" num
        return $[$num*2]
}
test1
echo $?

5.函数的传参数 

函数变量的作用范围:

函数在shell脚本中仅在当前的shell环境中有效

shell脚本中函数的变量默认全局有效

将变量限定在函数内部使用local命令

函数的传递参数要注意

脚本的$1 $2

函数的$1 $2

是没有关系的

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

范例:

vim dd.sh

 #!/bin/bash
myfun(){
i=8
echo $i
}
myfun
i=9
echo $i

 

 6.使用函数文件

新建一个专门放函数的文件

vim wenjian.sh

ostype (){
   if grep -i -q "linux 7" /etc/os-release
   then
   echo "centos7"
   fi
}

 7.函数递归

函数调用自己本身的函数

for循环

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

 

 阶乘

vim ff

#!/bin/bash
fact () {
 if [ $1 -eq 1 ]
  then
  echo 1
  else
  echo $[$1*`fact $[$1-1]`]
  fi
}

fact $1

 

2.数组 

数组

普通数组:下标是数字

关联数组:下标是有含义的字符串

变量:储存单个元素的内存空间

数组:存储多个元素的连续的内存空间,相当于多个变量的集合

数组的使用

一点要声明数组

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

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

定义数组格式

1.数组名:(数组值(中间用空格隔开))  一次性赋值

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

  数组名[下标2]=值2

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

  数组名[下标n]=值n 

例子

a=(10 20 30 40 50)

调用数组

echo ${a[0]} 调用第一个值

echo ${a[1]} 调用第二个值

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

echo ${a[3]} 调用第三个值

全部调用

echo ${a[@]}

echo ${a[*]}

显示数组的值的个数

echo ${#a[@]}

echo ${#a[*]}

显示所有下标

echo ${a[@]}

数据切片

a=(10 20 30 40 50)
echo ${a[@]:2:2}
跳过前两个 往后取两个

冒泡排序

a=(20 90 60 40 100)

轮次  总个数   需要比较的数  比几次     找到的数

第1轮  5      5个数        比4次     找到最大数

第2轮  5      4个数        比3次     找到第二大数  

第3轮  5      3个数        比2次     找到第三大的数

第4轮  5      2个数        比1次     找到第四大的数
   

双重循环

第一轮

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

第二轮

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

第三轮

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

............................................................5-4

排列组合

vim mp.sh

#!/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[@]}"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值