《云计算》-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命令行调用函数- 直接输入函数的名字,就可以调用
#定义一个函数 yday(){ #显示一天前的系统日期时间 date --date='1 day ago' } #调用函数 yday
- 要在脚本中调用函数,首先要创建函数,并确保它位于调用函数的语句之前。
- 因此,为了避免这种情况,要在脚本开头定义所有的函数和变量
- 可以把所有的函数存在一个函数文件中
- 把所有函数加载到当前脚本或是命令行
我们来写一个函数文件:
#!/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 函数文件
#!/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
- 函数的优点
- 节省大量的时间
- 避免一次次地写重复地代码
- 更容易地编写程序
- 非常简单地维护程序
相关文章推荐
- c++调用shell 或者dos命令—使用system函数
- 高级shell脚本编程之重定向、环境变量、shell函数、echo命令用法
- php中使用exec,system等函数调用系统命令
- linux下c编程系统调用之有名管道FIFO函数的使用及案例
- linux c之通过popen和pclose函数创建管道执行shell 运行命令使用总结
- 使用shell进行调用脚本或者命令driver的测试
- EF5+MVC4系列(12) 在主视图中直接用RenderAction调用子Action,并返回视图(Return View)或者分部视图(Return PartialView); 从主Action传值到子Action使用TempData传值;TempData高级用法
- Linux下使用c++调用shell命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif
- Js 使用new关键字调用函数和直接调用函数的区别
- 后台调用前台方法(能使用jquery的函数)
- C程序获取shell脚本命令输出,使用popen()函数
- shell编程之函数简单使用
- 在windows下使用cmd命令通过adb shell自动调用android模拟或真机的InstrumentRunner进行android 自动化测试
- 一个有用函数:python调用shell命令
- 使用call命令在GDB中重复调用某函数
- php中使用exec,system等函数调用系统命令