Shell-06 函数
Shell-06 函数#编写脚本,使用chkconfig命令,循环执行,关闭所有5级别服务 #!/bin/bash name=`chkconfig --list | cut -d‘ ‘ -f1` for i in [name];do chkconfig --level 5 $i off done name=`chkconfig --list | awk ‘{print $1}‘` for i in $name;do if chkconfig --list $i | grep "5:off" &> /dev/null;then echo "这个$i服务已经关闭" else chkconfig --level 5 $i off echo "这个$i服务已经关闭" fi done 1.函数介绍 为了避免代码的重复使用,我们一般通过函数编写代码块,而这个代码块用来实现某种功能。且这个功能在后面得代码中,会重复调用; Def 2.函数的格式 function 格式1: ????????????? Function fun_name{ ???????????????????? 函数体 } ?????? Fun_name() 【不调用函数,则函数体中的命令是不会被执行的;在哪里调用,函数体中的命令就在那里执行】 格式2: ?????? Fun_name(){ ????????????? 函数体 $1 $2…$10 } Fun_name 1 2 3 :wq Fun_name 4 5 6 7 8 9 10 11 12 13 14 ? 1.Case PATTERN支持的格式:* 任意内容start|stop) a*) ?????? Case语句中的pattern支持文件通配符的 2.*) ?????? Echo “Usage:please input{start|stop|restart|status}”????
if [ -e /var/lock/subsys/testd_name ] ;then ??????? echo “脚服务已启动” else ??????? touch /var/lock/subsys/testd_name ??????? echo “服务启动成功” fi
if [ -e /var/lock/subsys/testd_name ] ;then ??????? rm -f? /var/lock/subsys/testd_name ??????? echo “服务挂关闭成功” else ??????? echo “服务已关闭” fi
【将前面的代码写成函数】 ??? Start Stop
? fun_start(){ ??????? if [ -e /var/lock/subsys/testd_name ];then ??????????????? echo "服务已启动" ??????? else ??????????????? touch /var/lock/subsys/testd_name ??????????????? echo "服务启动成功" ??????? fi } fun_stop(){ ??????? if [ -e /var/lock/subsys/testd_name ];then ??????????????? rm -f /var/lock/subsys/testd_name ??????????????? echo "服务关闭成功" ??????? else ??????????????? echo "服务已关闭" ??????? fi } fun_restart(){ ??????? fun_stop ??????? fun_start } fun_status(){ ??? ????if [ -e /var/lock/subsys/testd_name ];then ??????????????? echo "testd_name is running" ??????? else ??????????????? echo "testd_name is stopped" ??????? fi } fun_usage(){ ???????? echo "Usage: please input{start|stop|restart|status}" } if [ $# -lt 1 ];then ??????? Usage ??????? exit 1 fi case $1 in ??????? start) ??????????????? fun_start ??????????????? ;; ??????? stop) ??????????????? fun_stop ??????????????? ;; ??????? reatart) ??????????????? fun_restart ??????????????? ;; ??????? status) ??????????????? fun_status ??????????????? ;; ??????? *) ??????????????? fun_usage ??????????????? ;; esac ?
useradd_1(){ for i in `seq 1 10` ;do if id user$i &> /dev/null;then echo “user$i 存在” else useradd user$i &> /dev/null echo “user$i OK” return 0 fi done } useradd_1 ? a)?????? 当函数中指定了判断语句时,默认要返回一个错误结果,但是最近一条命令确实正确的,需要通过return来返回我们需要的正确的状态码。 b)????? 函数结束的时候,我们需要指定一个return的正确返回码; 如果使用循环语句时,return会跳出循环 Userdel -r 删除用户以及用户家目录
函数 变量 和普通命令一样 只需要注意,在接收参数的时候,不会使用外部的传参,而是以脚本内部的参数为准
本地变量 ????????????????????? Local 变量名=xxx ????????????????????? 本地变量只在本函数的内部生效 局部变量 ????????????????????? 脚本内部的变量 环境变量 ????????????????????? 在整个Linux系统的bash中生效 i=1 TEST(){ ??????? Local i=9 ??????? Let i++ ??????? Echo i ??????? Exit 0 } TEST Echo i 扩展:关于脚本执行的问题 a)?????? bash的方式来执行 bash所执行的脚本中定义的变量,在当前shell的子shell中 b)????? 通过全路径或者相对路径的方式来执行-------#!/bin/bash 需要授权执行权限; c)?????? Source脚本文件或者.脚本文件 Source这种方式来执行脚本的时候,内部变量所定义的值是在当前的shell中的
你 站在镜子的前面,后面又有一面镜子 n的阶乘 n!=n*(n-1)! (n-1)!=(n-1)*(n-2)! fun(){ if [ $1 -le 1 ];then echo 1 else q=$[$1*$(fun$[$1-1])] echo $q fi } fun 5 ? ? ? 兔子数列,斐波那契数列 1+1=2? 1+2=3 2+3=5 3+5=8 1 1 2 3 5 8 13 21 34…. Fn = F(n-1)+F(n-2) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |