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

猜你喜欢

转载自www.cnblogs.com/dongzhanyi123/p/12009264.html