一、函数
函数的基本格式
[function] 函数名 (){
命令序列
[return x] #使用return或者exit可以显式的结束函数
}
法二:
函数名(){
命令序列
}
函数注意事项
直接写函数中调用
函数直接写函数名同名函数后一个生效
调用函数一定要先定义
只要先定义了调用的其他函数定义顺序无关
函数调用的方法
#!/bin/bash
h () {
echo “hello”
}
w () {
echo “world”
}
good () {
h
w
}
h
w
good
函数的返回值
#!/bin/bash
function test1 {
read -p “请输入一个数字:” num
return
[
[
[num*2]
}
test1
echo $?
函数的传参
在shell中,调用函数时可以向其传递参数。在函数体内部,通过$n的形式来获取参数的值,例如:$1表示第一个参数,$2表示第二个参数…使用位置参数来实现参数传递:
#!/bin/bash
sum () {
echo “第一个变量:” $1
echo “第二个变量:” $2
let n=$1+$2
echo $n
}
sum $2 $1
函数的递归
#!/bin/bash
#计算你输入的数值作为阶乘
fun() {
if [
1
−
e
q
1
]
;
t
h
e
n
e
c
h
o
1
;
e
l
s
e
l
o
c
a
l
t
p
=
1 -eq 1 ];then echo 1; else local tp=
1−eq1];thenecho1;elselocaltp=[
1
−
1
]
l
o
c
a
l
r
e
s
=
1 - 1] local res=
1−1]localres=(fun $tp)
echo $[$1 * $res]
fi
}
read -p “请输入:” num
res=$(fun $num)
echo $res
数组
shell数组的含义
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
数组下标由0开始
Shell数组用括号来表示,元素用“空格”符号分隔开
在shell语句中,使用、遍历数组时,数组格式要写成*$ {arr[@]}或$ {a[*]}
定义数组的方法
数组名=(value1 value2 … valuen)
数组名=([0]=value0 [1]=value0 [2]=value0 …)
数组名[0]=“value”
数组名[1]=“value”
数组名[2]="value
[root@]localhost ~# a[0]=1
[root@localhost ~]# a[1]=2
[root@localhost ~]# a[2]=3
[root@localhost ~]# a[3]=4
[root@localhost ~]# a[4]=5
[root@localhost ~]# echo ${a[@]}
1 2 3 4 5
数据的遍历
#!/bin/bash
x=(11 22 33 44 55 66)
for i in ${x[@]}
do
echo $i
done
数组切片
#!/bin/bash
p=(1 2 3 4 5 6 7 8)
echo “输出整个数组:” ${p[@]}
echo “输出数组2-4:” ${p[@]:1:3}
echo “输出6之后的数字:” ${p[@]:5:4}
数组替换
临时更换:
[root@localhost ~]# echo ${a[@]/3/33}
永久更换:重新赋值
[root@localhost ~]# a=(${a[@]/2/22})
数组删除和指定下标删除
冒泡函数
#!/bin/bash
array=(90 70 80 100 30 66)
echo "old_array:
a
r
r
a
y
[
∗
]
"
l
t
=
{array[*]}" lt=
array[∗]"lt={#array[*]}
#定义比较轮数,比较轮数为数组长度减一,从1开始
for ((i=1;i<=KaTeX parse error: Expected 'EOF', got '#' at position 17: …t;i++)) do #̲确定比较元素的位置,比较相邻两…lt-i;j++))
do
#定义第一个元素的值
first=KaTeX parse error: Expected '}', got 'EOF' at end of input: {array[j]}
#定义第二个元素的值
k=
[
[
[j+1]
second=KaTeX parse error: Expected '}', got 'EOF' at end of input: {array[k]}
#如果第一个元素比第二个元素大就互换
if [ $first -gt KaTeX parse error: Expected 'EOF', got '#' at position 23: …];then #̲把第一个元素的值保存到临时变量…first
#把第二个元素值赋给第一个元素
array[
j
]
=
j]=
j]=second
#把临时的变量赋给第二个元素
array[
k
]
=
k]=
k]=temp
fi
done
done
echo “new_array:${array[@]}”