zoukankan      html  css  js  c++  java
  • shell脚本编程基础之函数

    函数

    作用:代码重用
    
    定义函数:
    方法1:
    function FUNCTION_NAME {                #函数名和定义变量名一样,只能包含数字字母下划线,并且不能以数字开头
      command
    }
    
    方法2:
    FUNCTION_NAME() {            
      command
    }
    
    Example:
    #!/bin/bash
    function SHOWMENU {                 #定义函数
    cat <<EOF
    f|F) show memory usages
    d|D) show disk usages
    s|S) show swap usages
    q|Q) quit
    EOF
    }
    
    SHOWMENU      #函数引用
    read -p "Please choose options: " CHOS
    until [ $CHOS == 'q' -o $CHOS == 'Q' ];do
    case $CHOS in
    d|D)
       df -h
       ;;
    f|F)
       free -h | grep "Mem"
       ;;
    s|S)
       free -h | grep "Swap"
       ;;
    *)
       echo "Input false,please again choose options"
       ;;
    esac
       SHOWMENU
       read -p "Please choose options: " CHOS
    done
    

    引用函数的执行结果和执行状态结果

    引用函数的执行结果:
    #!/bin/bash
    function TWOINT {
    A=6
    B=9
    C=$[$A+$B]
    echo "$C"
    }
    
    M=17
    SUM=$[$M+`TWOINT`]
    echo "$SUM"
    通过反向引号,引用函数的执行结果
    
    引用函数的执行状态返回值:
    #!/bin/bash
    function TWOINT {
    A=6
    B=9
    C=$[$A+$B]
    }
    
    TWOINT
    echo $?
    

    函数自定义状态返回值

    return:可以自定义函数的状态返回值(0——255),但是函数中如果遇到return,那么将终止(退出)函数,后面的函数语句将不再执行
    
    示例:
    #!/bin/bash
    USERS=hadoop
    function USERADD {
    if ! id -u $USERS &>/dev/null;then    #if是通过判断命令的执行状态返回值进行判断的,0为真,非0为假
       useradd $USERS
       echo $USERS | passwd --stdin $USERS &>/dev/null
       return 0
    else
       return 1
    fi
    }
    USERADD
    if [ $? -eq 0 ];then
       echo "$USERS add success"
    else
       echo "$USERS add failed"
    fi
    

    接收参数的函数

    FUNCTION_NAME $1 $2...
    函数调用,后面跟上参数即可
    
    示例:
    #!/bin/bash
    function TWOINT {
    echo $[$1+$2]
    }
    TWOINT 5 6
    
    还可以把函数的执行结果保存到一个变量里:
    示例1:
    #!/bin/bash
    function TWOINT {
    echo $[$1+$2]
    }
    SUM=`TWOINT 5 6`
    echo "$SUM"
    
    示例2:
    #!/bin/bash
    function TWOINT {
    echo $[$1+$2]
    }
    for i in {1..10};do
       let J=$[$i+1]
       echo "$J+$i="`TWOINT $J $i`
    done
    
    示例3:
    #!/bin/bash
    USERS=hadoop
    function USERADD {
    if ! id -u $1 &>/dev/null;then
       useradd $1
       echo $1 | passwd --stdin $1 &>/dev/null
       return 0
    else
       return 1
    fi
    }
    
    for i in {1..10};do
       USERADD user$i
       if [ $? -eq 0 ];then
           echo "add user$i success"
       else
           echo "add user$i failed"
       fi
    done
    
    示例4:
    #!/bin/bash
    function USERS {
    if id $1 &>/dev/null;then
       getent passwd | grep -w "$1" | awk -F: '{print $1,$NF}'
       return 0
    else
       echo "$1 is not exists"
       return 1
    fi
    }
    read -p "please input user name(q|Q): " NAME
    until [ $NAME == 'q' -o $NAME == 'Q' ];do
       if USERS $NAME ;then
           read -p "please input next user: " NAME
       else
           read -p "please again input user: " NAME
       fi
    done
  • 相关阅读:
    双链表 teacherboubleloopnohead
    System.Reflection(温习二)
    在地址栏调试js(小技巧)
    在vs2005中的ReportViewer(RDLC报表)中使用直接打印功能,在vs2005使用ReportViewer2008
    .net的手动编译类方法
    System.Reflection(温习)
    https://imo.im/
    SOA是什么(转)
    ASP.NET的编译方法(转,复习一下)
    动态生成一个继承接口的类
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/12009264.html
Copyright © 2011-2022 走看看