您的位置:首页 > 大数据 > 云计算

《云计算》-shell高级编程-shell函数第二篇,return命令,函数中调用函数,递归函数调用,函数放在后台使用

2019-03-21 19:39 591 查看
  • 上一篇函数的基本的概念,使用,本篇介绍,函数调用的几种方式
使用return命令
  • 如果在函数使用内置命令,return,则函数执行到带有return的语句时结束
  • 如果return带有一个数值型的参数,则这个参数就是函数的 返回值,最大255
  • 函数返回值就是函数体内最后执行一个执行的命令的返回状态

来看一个return的脚本:
检查某个进程号是否运行:

checkpid () {
#定义本地变量
local i

#使用for循环遍历传递给此函数的所有参数
for  i  in  $*
do
[ -d "/proc/$i" ] &&  return  0
done

#返回1
return 1
}

此函数的功能就是检查某个进程号是否存在,存在返回0 ,不存在返回1

  • 在函数中不适用return语句的情况下,除非发生语法 错误或者一个同名并且为只读的函数已经存在,函数默认的返回值 是0
函数返回值测试
  • 利用特殊参数$? 判断最后一次执行的前台命令的退出状态
#调用函数
checkpid  $pid1  $pid2  $pid3
if  [ $?  =  0 ] ;then
echo  "the one of  them  is  running ."
else
echo "these  PIDs  are  not   running ."
fi

也可以使用if语句测试函数返回值

if  ( checkpid  $pid1 $pid2 $pid3) ;then
echo  "the one of  them  is  running ."
else
echo "these  PIDs  are  not   running ."
fi

函数的调用

1.在shell命令行调用函数
  • 直接输入函数的名字,就可以调用
2.在脚本中 调用函数
#定义一个函数
yday(){
#显示一天前的系统日期时间
date --date='1  day  ago'
}
#调用函数
yday
  • 要在脚本中调用函数,首先要创建函数,并确保它位于调用函数的语句之前。
  • 因此,为了避免这种情况,要在脚本开头定义所有的函数和变量
3. 从函数中调用函数
  • 可以把所有的函数存在一个函数文件中
  • 把所有函数加载到当前脚本或是命令行

我们来写一个函数文件:

#!/bin/bash
# AUTHOR: Xie_qi_chao
# CREATED: 21/03/2019
# FILENAME:myfunction.sh

#定义函数
declare  -r  TRUE=0
declare  -r  FALSE=1
declare  -r  PASSWD_FILE=/etc/passwd

###############################################
#  用途:将字符串换为小写
#  参数:  $1 -> 要转换未小写的字符串
###############################################

function ro_lower ()
{
#定义本地变量str
local  str="$@"
#定义本地变量output
local  output
#将变量str的值转换为小写后赋值给output
output=$(tr '[A-Z]' '[a-z]' <<< "${str}" )
echo $output
}

#################################################
#  用途:如果脚本由root用户执行则返回true
#  返回值:Ture或False
##############################################

function is_root () {
[ $(id -u) -eq 0 ] &&  return  $TRUE || return $FALSE
}

##################################################
#  用途:如果应乎存在与文件/etc/passwd/则返回ture
#  参数:$1
#################################################

function is_user_exits {
local u="$1"
grep -q "^${u}" $PASSWD_FILE  &&  return $TRUE  || return  $FALSE
}
  • 执行脚本之后,就会将函数加载当前shell环境中
  • 在脚本中执行刚刚的函数文件,就可以实现脚本调用函数
  • 也可以使用 source 函数文件
4.递归函数调用
#!/bin/bash
#AUTHOR:Xie_qi_chao
#CREATED:21/03/2019
#FILENAME:fact.sh

#定义一个函数factorial———计算给定命令行参数的阶乘

factorial () {

local i=$1
local  f
declare  -i i
declare  -i f

#factorial被调用直到$f 的值<=2
#开始递归

if [ "$1"  -le  2  ] ;then
echo  $i
else
f=$(( i - 1 ))
f=$(factorial $f)
f=$(( f * i ))
echo $f
fi
}

if [ "$#"  -eq  0  ];then
echo "Usage: $0 number"
exit 1
fi
factorial  $1
[root@xieqc shell]# sh fact.sh 10
3628800
函数放在后台使用

看一个脚本,磁带备份时可以显示一连串的小圆点,类似于进度条。

#!/bin/bash
#AUTHOR:Xie_qi_chao
#FILENAME:progressdots.sh
#CREATED:21/03/2019

progress ()
{
echo -n "$0 :Please  wait ..."

while true
do
echo -n  "."
sleep 5
done
}

dobackup ()
{
tar  -zcvf /dev/st0 /home  >/dev/null  2>&1
}
progress  &
myself=$!
dobackup
kill  $myself > /dev/null  2>&1
echo -n  "...done"
echo
  • 函数的优点
  • 节省大量的时间
  • 避免一次次地写重复地代码
  • 更容易地编写程序
  • 非常简单地维护程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: