shell编程之函数
一、shell函数
1.什么是shell函数?
shell函数
使用函数可以避免代码重复
使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强
2.shell函数的定义
1.functiion 函数名 {
命令序列
}
2.函数名() {
命令序列
}
3.函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
1.函数一结束就取返回值,因为$?变量只返回执行的最后一个命令的退出状态码
2.退出状态码必须是0~255,超出时值将为除以256取余
#!/bin/bash
function test01 {
read -p "请输入一个整数:" num
return $[num *2]
}
test01
echo $?
#!/bin/bash
function test02 {
read -p "请输入一个整数:" num
echo $[num * 2]
}
res=$(test02)
echo $res
二、shell函数实验
1.函数计算
2.函数输出变量
3.函数实现阶乘
4.函数递归查找目录文件
5.通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#!/bin/bash
#通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#定义一个遍历PATH环境变量的函数
list_path() {
IFSB=$IFS
IFS=$IFS':'
for F in $PATH
do
echo $F
done
IFS=$IFSB
}
#定义一个递归函数
listf() {
for F in $(ls $1)
do
if [ -d "$1/$F" ];then
echo "$2$F"
listf "$1/$F" " $2"
else
if [ ! -x "$1/$F" ];then
echo "$2$F"
fi
fi
done
}
######main######
folder=$(list_path)
for path in $folder
do
echo $path
listf "$path" " "
done
6.将一个点分十进制格式的IP地址转换成点分二进制格式,比如 255.255.255.255 --> 11111111.11111111.11111111.11111111
switch_bin() {
NUM=$1
for i in {1..8}
do
SUM=$[NUM % 2]$SUM
let NUM/=2
done
echo $SUM
}
#定义一个用于分割IP的函数
SPT() {
IP=$1
for i in {1..4}
do
num=${IP%%.*}
IP=${IP#*.}
BIN=$(switch_bin num)
echo -n $BIN.
done
}
#####main#####
read -p "请输入一个合法IP:" INIP
res=$(SPT $INIP)
echo ${res%.*}
7.加载函数库文件到当前脚本的shell
#!/bin/bash
#加载函数库文件到当前脚本的shell
. /root/ky28/funcs
value1=10
value2=5
res1=$(jiafa $value1 $value2)
res2=$(jianfa $value1 $value2)
res3=$(chengfa $value1 $value2)
res4=$(chufa $value1 $value2)
res5=$(fact $value1 $value2)
echo "加法的结果为$res1"
echo "减法的结果为$res2"
echo "乘法的结果为$res3"
echo "除法的结果为$res4"
echo "阶乘的结果为$res5"
函数库文件
jiafa() {
echo $[$1 + $2]
}
jianfa() {
echo $[$1 -$2]
}
chengfa() {
echo $[$1 * $2]
}
chufa() {
if [ $2 -eq 0 ];then
echo "除数不可为0"
else
echo $[$1 / $2]
fi
}
fact() {
if [ $1 -eq 1 ];then
echo 1
elif [ $1 -gt 1 ];then
local tmp=$[$1 - 1]
local res=$(fact $tmp)
echo $[$1 * res]
else
echo "输入的值无效。请输入大于等于1的整数!"
fi
}