shell函数
概述
因为shell是一个解释器,所以它不能对为它编写的程序进行编译,而是在每次从磁盘加载这些程序时对它们进行解释。而程序的加载和解释都是非常耗时的。
shell还以一种内部格式来存放这些函数,这样就不必耗费大量的时间来解释它们,shell函数将命令序列按格式写在一起,可以方便重复使用命令序列。
shell函数格式
//
function name { ## function 关键字 name 函数名
statements ## 命令序列
[return value] ##
};
$?只会对函数返回的最后一条命令的执行状态做判断,成功就为0,失败就返回一个非0值,可以用到return命令,指定一个整数值来定义函数的退出状态码,可以根据给定的状态码分析函数的执行结果,这个整数值在0-255之间,如果定义return的值超过了255,他返回的就是一个错误的返回值
//
hello(){
echo nihao
ls xxx
return 20 范围是0-255之间
}
[root@localhost ~]# ./hanshu.sh
nihao
ls: 无法访问xxx: 没有那个文件或目录
[root@localhost ~]# echo $?
20;
递归函数
位置变量
//
SUM(){
let sum=$1+$2
echo $sum
}
SUM $1 $2
[root@localhost ~]# ./hanshu.sh 1 2
3;
//
[root@localhost ~]# cat bl.sh
#!/bin/bash
递归遍历
function bl(){
for i in `ls $1`
do
if [ -d $1"/"$i ];then
echo -e "\033[34m$1/$i \033[0m"
bl $1"/"$i
else
echo -e "\e[1;31m $1/$i\e[0m"
fi
done
}
bl $1
;
数组
定义数组
//
[root@localhost ]# c=(1 2 3 4 )
或者
[root@localhost ]# c="1 2 3 4"
或者
[root@localhost ]# b=([0]=1 [1]=2 [2]=3 [3]=4);
查看数组中的值
//
[root@localhost jiaoben]# echo ${c[1]} ##因为下标是从0开始,所以1是第二个数的值
2;
查看数组所有值
//
[root@localhost jiaoben]# echo ${c[*]}
1 2 3 4
[root@localhost jiaoben]# echo ${c[@]}
1 2 3 4 ;
查看数组中的个数
//
[root@localhost jiaoben]# echo ${#c[@]}
5;
查看数组的索引下标
//
[root@localhost jiaoben]# echo ${!c[@]}
0 1 2 3 4;
查看下标1到3个
//
[root@localhost jiaoben]# echo ${c[@]:1:3}
1 2 3;
//
[root@localhost jiaoben]# echo ${c[@]/1/12}
12 2 3 4;
// An highlighted block
var foo = 'bar';
// An highlighted block
var foo = 'bar';