函数
作用:代码重用 定义函数: 方法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