shell 函数应用与数组

函数概述

当一些命令序列需要反复调用执行时,若每次使用同一命令就使用一遍,就会导致代码量很大,行数特别多,我们就可以将这些命令序列按格式写在一起,做成函数形式,以便调用

函数定义

[function] 函数名 (){
	命令序列
	[return x]
}
函数名     //表示调用函数

函数案例:

#!/bin/bash
function hello(){   //function可以不写。hello为函数名
        echo "hello"  
        return 22   //返回值为22,不写则返回值为0,不成功则不为0
}
hello   //调用函数,不写则无法启用此函数。

return 22:可以通过return检查函数问题。定位到对应函数

[root@localhost ~]# bash hello.sh
hello
[root@localhost ~]# echo $?
22
[root@localhost ~]# 

加法运算

#!/bin/bash
qiuhe(){
  let sum=$1+$2
  echo $sum
}
qiuhe $1 $2

[root@localhost ~]# bash jia.sh 10 20
30

1-100求和

#!/bin/bash
osum(){
sum=0
for i in {1..100}
do
  let sum=$sum+$i
done
echo $sum
}
osum

[root@localhost ~]# bash shu.sh
5050

求1-100的偶数和

#!/bin/bash
osum(){
sum=0
for i in {1..100}
do
if [[ $i%2 -eq 0 ]];then
  let sum=$sum+$i
fi
done
echo $sum
}
osum

[root@localhost ~]# bash oshu.sh
2550

计算1到?的总和或偶数和

#!/bin/bash
osum(){
sum=0
read -p "计算1到多少的和:" num
read -p "计算总和输入0,计算偶数和输入1:" he
for i in `seq $num`
do
if [ $he -eq 0 ];then
  let sum=$sum+$i
else
  if [[ $i%2 -eq 0 ]];then
    let sum=$sum+$i
  fi
fi
done
echo $sum
}
osum

[root@localhost ~]# bash oshu.sh
计算1到多少的和:100
计算总和输入0,计算偶数和输入11
2550
[root@localhost ~]# bash oshu.sh
计算1到多少的和:100
计算总和输入0,计算偶数和输入1:0
5050

函数中调用函数

函数中调用其他函数,必须加``

#!/bin/bash
function hello(){
        echo "hello"
}
world(){
        echo "world"
}
nihao(){
        echo `hello` `world`  //调用hello,world函数
}
nihao

[root@localhost ~]# bash hello.sh
hello world

source 脚本文件 函数名 :调用其他脚本中的函数


#!/bin/bash
function hello(){
        echo "hello"
}
world(){
        echo "world"
}
nihao(){
        echo `hello` `world`
        source /root/oshu.sh osum
}
nihao

在这里插入图片描述

aaa(){
a=10
echo $a
}
a=20
aaa     //调用a=10,因此echo $a 还是等于10
echo $a   此时的a是aaa调用的a。
[root@localhost hanshu]# bash hello.sh
10
10
aaa(){
a=10
echo $a
}
aaa   //aaa已经结束
a=20  //赋值a=20
echo $a
[root@localhost hanshu]# bash hello.sh
10
20

数组

数组应用场景

●获取数组长度
●获取元素长度
●遍历元素
●元素切片
●元素替换
●元素删除

数组应用

建立数组

[root@localhost ~]# a=(1 2 3 4 5 6 7)

declare -a :查看数组
在这里插入图片描述

declare -a a='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5" [5]="6" [6]="7")'
[0]是下标,便于遍历数组

查找数组中的元素

[root@localhost ~]# echo ${a[4]}     //取出数组,[]里的是下标。不写默认为0
5
[root@localhost ~]# echo ${a[*]}   //遍历数组中所有数
1 2 3 4 5 6 7[root@localhost ~]# echo ${a[@]}
1 2 3 4 5 6 7

[root@localhost ~]# echo ${#a[@]}   //查看数组有多少个数
7
[root@localhost ~]# echo ${!a[@]}  //查看下标
0 1 2 3 4 5 6
unset 数组[4]  :	取消数组下标4的值
[root@localhost ~]# echo ${#a[*]}
6
[root@localhost ~]# echo ${a[*]}
1 3 4 5 9 10
[root@localhost ~]# unset a[3]
[root@localhost ~]# echo ${a[*]}
1 3 4 9 10
unset 数组 :取消数组

在这里插入图片描述

遍历数组的脚本

#!/bin/bash
a=(1 2 3 4 5 6)
for i in ${!a[*]}
do
echo ${a[$i]}
done

在这里插入图片描述
查找最大的数

#!/bin/bash
a=(41 2 32 14 66 46)
max=${a[0]}
for i in ${!a[*]}
do
  if [ $max -lt ${a[$i]} ];then
        let max=${a[$i]}
  fi
done
echo $max

[root@localhost ~]# bash bianli.sh
66

冒泡排序

#!/bin/bash
a=(41 2 32 14 45 66)
max=${a[0]}
for ((k=1;k<${#a[*]};k++))   
do
for ((i=0;i<${#a[*]}-$k;i++))
do
  if [ ${a[$i]} -gt ${a[$i+1]} ];then
        max=${a[$i]}
        a[$i]=${a[$i+1]}
        a[i+1]=$max
  fi
done
done
echo ${a[*]}
#第一次循环,a[0]和a[1]比,a[0]>a[1],将42赋值给max,a[0]获取a[1]的值。再将42赋值给a[1];’2比,再进行赋值。a[1]=32,a[2]=41
......
#第五次:a[5]=45与a[6]=66比较。位置不换。此时顺序:2 32 14 41 45 66
#k+1第二轮循环:顺序是:2 14 32 41 45 66
......   #每次循环都在比较前后的大小进行调整
#第5次循环:2 14 32 41 45 66
[root@localhost ~]# bash bianli.sh
2 14 32 41 45 66
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值