一、函数

   1、function: 功能,函数

   2、函数:把某个特定的功能或应该独立执行的代码封装成独立的功能并取个名字,使用时调用它即可;

   3、函数特征:结构化编程,不能独立运行,需要调用时执行,可以被多次调用;

二、函数编程和应用

   1、定义一个函数,方法一:

       function FUNCNAME {

         command(独立执行的命令)

       }

   2、定义一个函数,方法二:

       FUNCNAME() {

         command

       }

   3、函数自定义执行状态返回值:return #

       #表示:0-255

   4、接受参数的函数:./SHELLNAME.sh m n

       参数$1: m

       参数$2: n


如1:

#!/bin/bash

#

SHOWMENU() {

cat << EOF

d|D)show disk usages.

m|M)show menory usages.

s|S)show swap usages.

q|Q)quit.

EOF

}

SHOWMENU

read -p "Your are choice:" CHOICE


until [ $CHOICE == 'q' -o $CHOICE == 'Q' ];do

       case $CHOICE in

       d|D)

               df -hP;;

       m|M)

               free -m | grep "^Mem";;

       s|S)

               free -m | grep "^Swap";;

       *)

               read -p "Your are choice again:" CHOICE;;

       esac

       SHOWMENU

       read -p "Your are choice:" CHOICE

done


如2:

#!/bin/bash

#

ADDUSER() {

USERNAME=user20

if ! id -u $USERNAME &> /dev/null;then

       useradd $USERNAME

       echo $USERADD | passwd --stdin $USERADD &> /dev/null

       return 0

else

       return 1

fi

}

ADDUSER

if [ $? == 0 ];then

       echo "user add finished."

else

       echo "user add failuer."

fi


如3:

#!/bin/bash

#

TWOSUM() {

echo $[$1+$2]

}

for I in {1..10};do

       let J=$[$I+1]

       echo "$I plus $J `TWOSUM $I $J`" ---->传递2个参数

done


练习,写一个脚本:

   判定192.168.0.200-192.168.0.254之间的主机哪些在线。要求:

   1、使用函数来实现一台主机的判定过程;

   2、在主程序中来调用此函数判定指定范围内的所有主机的在线情况。

方法一:

#!/bin/bash

#

PING() {

       for I in {1..10};do

               if ping -c 1 -w 1 192.8.8.$I &> /dev/null;then

                       echo "192.8.8.$I is up."

               else

                       echo "192.8.8.$I is down."

               fi

       done

}

       PING

方法二:

#!/bin/bash

#

PING() {

       if ping -c 1 -w 1 $1 &> /dev/null;then

               echo "$1 is up."

       else

               echo "$1 is down."

       fi

}

       for I in {1..10};do

               PING 192.8.8.$I

       done

方法三:

#!/bin/bash

#

PING() {

       if ping -c 1 -w 1 $1 &> /dev/null;then

               return 0

       else

               return 3

       fi

}

for I in {1..10};do

       PING 192.8.8.$I

       if [ $? == 0 ];then

               echo "192.8.8.$I is up."

       else

               echo "192.8.8.$I is down."

       fi

done

写一个脚本:使用函数完成

   1、函数能够接受一个参数,参数为用户名;

      判断一个用户是否存在

      如果存在,就返回此用户的shell和UID;并返回正常状态值;

      如果不存在,就说此用户不存在;并返回错误状态值;

   2、在主程序中调用函数;

   扩展1:在主程序中,让用户自己输入用户名后,传递给函数来进行判断;

   扩展2:在主程序中,输入用户名判断后不退出脚本,而是提示用户继续输入下一个用户名;

       如果用户输入的用户不存在,请用户重新输入;但如果用户输入的是q或Q就退出;

参考:

#!/bin/bash

#

USER() {

if id -u $1 &> /dev/null;then

       echo "$1 is UID and SHELL:`grep "^$1" /etc/passwd | cut -d: -f3,7`"

       return 0

else

       echo "Not user $1"

       return 5

fi

}

read -p "Your input username:" USERNAME

until [ $USERNAME == q -o $USERNAME == Q ];do

       USER $USERNAME

       if [ $? == 0 ];then

               read -p "Your input username:" USERNAME

       else

               read -p "Your input username again:" USERNAME

       fi

done