观书散遗帙,探古穷至妙。这篇文章主要讲述shell函数应用相关的知识,希望能为你提供帮助。
shell函数概述什么叫shell函数?
将命令序列按格式写在一起
可方便重复使用命令序列
Shell函数格式:
格式【1】:
function函数名
命令序列
格式【2】
函数名()
命令序列
示例:
#!/bin/bash
#定义函数
function hello
echo "hello world"
######### main ########
#调用函数
hello
#定义函数user
user()
useradd $name
echo 123456 | passwd --stdin $name
#----main----
read -p "请输入用户名" name
#调用函数
user
函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
2、退出状态码必须是0~255,超出时值将为除以256取余。
示例:方法一
function num
read -p "请输入: " sum
return $[$sum * 2]
-----main-----
num
echo $?
方法二:
num()
read -p "请输入:” sum
echo $[$sum * 2]
result=num
echo $result
函数传参:
sum1()
sum=$[$1 + $2]
echo $sum
-----main-----
read -p "输入第一个参数:" first
read -p "输入第二个参数:" second
sum1 $first $second
或
sum1()
sum=$[$1 + $2]
echo $sum
result=$(sum1 $1 $4 $2)
echo $result
输出结果为:$1+$4
或
函数变量的作用范围
函数在Shell脚本中仅在当前Shell环境中有效
Shell脚本中变量默认全局有效
将变量限定在函数内部使用 local 命令
示例一:
myfun()
local i
i=7
echo $i
i=8
myfun
echo $i
递归
函数调用自己本身的函数
示例一: 阶乘# 5 * $result(4*$result(3*$result(2*$result(1))))
fact()
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
-----main-----
read -p "请输入:" n
result=$(fact $n)
echo $result
示例二:递归目录
function list_files
for f in `ls $1`#遍历指定目录内容
do
if [ -d "$1/$f" ]#如果是目录则输出目录名称并继续调用函数判断子目录,且输出时缩进;
then
echo "$2$f"
list_files "$1/$f" " $2"
else#如果是文件则直接缩进输出文件名称
echo "$2$f"
fi
done
-----main-----
#第一个位置变量用户判断是目录或者文件,
#第二个位置变量用于给子目录或者子文件实现位移(缩进)用的
list_files "/var/log" ""
创建库
示例一:
#步骤一:建立函数库
vim myfuncs.sh
jiafa()
echo $[$1 + $2]
jainfa()
echo $[$1 + $2]
chengfa()
echo $[$1 * $2]
chufa()
if [ $2 -ne 0 ]; then
echo $[$1 / $2]
else
echo "$2不能为0"
fi
fact()
if [ $1 -eq 1 ]; then
echo 1
elif [ $1 -eq 0 ]; then
echo 0
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
【shell函数应用】
步骤二:在其他脚本中调用函数库
#!/bin/bash
. ~/jiaoben/demon7.sh
v1=$1
v2=$2
res1=$(jiafa $v1 $v2)
res2=$(jianfa $v1 $v2)
res3=$(chengfa $v1 $v2)
res4=$(chufa $v1 $v2)
res5=$(fact $v1)
echo"加法结果为:$res1"
echo"减法结果为:$res2"
echo"乘法结果为:$res3"
echo"除法结果为:$res4推荐阅读
- #yyds干货盘点#一个Getter引发的血案
- 关于ThreadLocal的九个知识点,看完别再说不懂了!
- parted#yyds干货盘点#
- #yyds干货盘点# @Autowired注解到底怎么实现的?
- 设USB 可移动存储设备设为只读的方法
- 山特ups 山特ups北京代理
- #yyds干货盘点# 手把手教你使用Python网络爬虫实现邮件定时发送(附源码)
- 科华UPS电源一直响警报为什么会产生呢()
- Go语言变量