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