语句块定义成函数约等于别名,定义函数,再引用函数
封装的可重复利用的具有特定功能的代码
法一:
[function] 函数名 (){
命令序列
[return x] #使用return或者exit可以显式的结束函数
}
法二:
函数名(){
命令序列
}
1.直接写函数中调用
2函数直接写函数名同名函数后一个生效
3.调用函数一定要先定义
4.只要先定义了调用的其他函数定义顺序无关
#!/bin/bash
h () {
echo "hello"
}
w () {
echo "world"
}
nihao () {
h
w
}
h
w
nihao
return表示退出函数并返回一个退出值,脚本中可以用? 变 量 显 示 该 值 使 用 原 则 : 1 、 函 数 一 结 束 就 取 返 回 值 , 因 为 ?变量显示该值 使用原则:
1、函数一结束就取返回值,因为?变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时值将为取余256
#!/bin/bash
user () {
if [ $USER = root ]
then echo "这是管理员用户"
else
echo "这不是管理员"
return 1
fi
}
user
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。
#!/bin/bash
sum () {
echo "第一个变量:" $1
echo "第二个变量:" $2
let n=$1+$2
echo $n
}
sum $2 $1
在外部调用命令需要先source一下。然后调用函数,再调用函数中的变量
[root@yxp data]#vim function.sh
#!/bin/bash
color () {
RED="echo -e \E[31m"
GREEN="echo -e \E[32m"
END="\E[0m"
}
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
#!/bin/bash
aa () {
a=10
}
a=20
aa
echo $a
函数调用自己本身的函数
``#!/bin/bash
fact () {
#判断传入的参数,如果是0,则直接输出1
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
#如果传入的参数不是1,则函数调用函数自身,传入参数计算
echo $[$1* $(fact $[$1-1])]
fi
}
fact $1`
## 1.
数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
数组的分类
普通数组:不需要声明直接定义,下标索引只能是整数
关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串
数组的定义方式
(30 20 10 60 50 40)
0 1 2 3 4 5
第一种:直接把要加入数组的元素用小括号括起来,中间用空格分开
num= (11 22 33 44)
${#num}显示宁符串长度
数组名=(value0 value1 value2)
显示所有 ${num[*]}
第二种:精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续
num= ([0]-55 [1]=66 [2]=77 [4]=88)
数组名=( [0]=value [1]=value [2]=value. . . )
第三种:先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组
list=“11 12 13 14”
num= ($list)
数值类型
字符类型:
使用"”或’’定义
#数组可以是数值型
[root@yxp ~]#a=(1 2 3 4 5);echo ${a[@]}
1 2 3 4 5
#数组可以是混合型
[root@yxp ~]#a=(a 1 2 apple);echo ${a[@]}
a 1 2 apple
echo ${数组名[*]}
echo ${数组名[@]}
echo ${#数组名[*]}
echo ${#数组名[@]}
数组名=(元素0 元素1 元素2 ……) 定义数组
echo ${数组名[索引值]} 输出数组索引值对应的元素,索引值为从0开始
类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。
基本思想:
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,
把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),
这样较小的元素就像气泡一样从底部上升到顶部。
算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,
一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,
同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,
以确定是否交换位置,对比和交换次数随排序轮数而减少