脚本编程之函数: function: 功能

 

      结构化编程,不能独立运行,需要调用时执行,可以被多次调用

 

1、定义一个函数:

function FUNCNAME {

  command

}

 

FUNCNAME()  {

  command

}

 

2、自定义函数执行状态返回值:return #    (0-255)

 

3、接受参数的函数:

./a.sh m n

$1: m

$2: n

 

TWOINT 5 6

$1: 5

$2: 6

 

练习1:写一个脚本,自动显示相关信息

#!/bin/bash

# diskusage.sh

function SHOWMENU() {    #定义函数
cat << EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
EOF
}

read -p "Your choice:" CHOICE
until [ $CHOICE == 'q' -o $CHOICE == 'Q' ];do
  case $CHOICE in
    d|D) df -h ;;
    m|M) free -m |grep "^Mem" ;;
    s|S) free -m |grep "^Swap" ;;
    *) SHOWMENU
    read -p "Your choice,again:" CHOICE ;;
  esac
  SHOWMENU
  read -p "Your choice,again:" CHOICE
done


练习2:写一个脚本,自动新增用户且密码与用户相同

#!/bin/bash
# adduser.sh
#
ADDUSER() {
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..3};do
  ADDUSER user$I
  if [ $? -eq 0 ] ;then
    echo "add user$I finished."
  else
    echo "user$I exists,add Failuer."
  fi
done


练习3:写一个脚本,判定192.168.0.200-192.168.0.254之间的主机哪些在线。要求:

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

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

#!/bin/bash
# ping.sh
#
PING() {
   if ping -c1 -W1 $1 &> /dev/null;then
     return 0
   else
     return 1
   fi
}

for I in {200..210};do
  PING 10.109.131.$I
  if [ $? -eq 0 ] ;then     #上一条语句执行状态结果0或1 
    echo "10.109.131.$1 is up."
  else
    echo "10.109.131.$1 is down."
  fi
done


for I in {200..210};do
  if PING 10.109.131.$I ;then  #彩色部分输出return的结果0或1,加反引号echo显示的信息
    echo "10.109.131.$1 is up."
  else
    echo "10.109.131.$1 is down."
  fi
done


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

1、函数能够接受一个参数,参数为用户名;判断一个用户是否存在, 

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

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

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

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

 扩展2:在主程序中,输入用户名判断后不退出脚本,而是提示用户继续输入下一个用户名;如果用户输入的用户不存在,请用户重新输入;但如果用户输入的是q或Q就退出;

#!/bin/bash
# bash.sh
#
USER(){
  if id $1 &> /dev/null ;then
    echo "` grep ^$1 /etc/passwd |cut -d: -f3,7`"
    return 0
  else
    return 1
  fi
}

read -p "keyin your username:" USERNAME
until [ $USERNAME == 'Q' -o $USERNAME == 'q' ];do
  if USER $USERNAME ;then         #if语句执行USER的return值0或1  
    read -p "keyin your username:" USERNAME
  else
    read -p "$USERNAME exists,Please keyin your username again:" USERNAME
  fi
done

[root@JackTest etc]# ./bash.sh
keyin your username:root
0:/bin/bash
keyin your username:ww
ww exists,Please keyin your username again:tt
tt exists,Please keyin your username again:root
0:/bin/bash
keyin your username:q

[root@JackTest etc]#


---end---