1.随机选人(pickug.sh)

#!/bin/bash
# Script Name: pickusers.sh
# Author: Our RHCE Team
# Version: 0.0.01
# Created Time: 07/14/10 12:51:30
declare -a PICKED
declare -a USERS=("Zhaoguang" "LiangXin" "Debao" "LiDi" "Longfei" "Beidou" "Hongguang" "QingKai" "Ronghai" "Xiaoyu" "Huixu" "Pengju" "Jianying" "Xiaobing" "XuHong" "CuiCan" "Hongjun" "Yunchao" "Yaofeng" "ZhangYang" "Chunsheng" "Yongke" "YangChen" "Jixin" "Haoyuan" "Guanyu" "Yipin" "LiuYan")
declare -a GRPS=("First" "Second" "Third" "Forth" "Fifth")

comp() {
  local SAME=0
  local let I=0

  if [ ${#PICKED[*]} -gt 0 ]; then
    while [ $I -le ${#PICKED[*]} ];do
      [ "$1" == "${PICKED[$I]}" ] && SAME=1 && break
      let $((I++))
    done
  fi

if [ $SAME -eq 0 ]; then
   local INDEX=$[${#PICKED[*]}+1]
   PICKED[$INDEX]=$1
   echo -e "\033[32m${PICKED[$INDEX]}\033[0m"
   return 0
  else
    return 1
  fi
}

pickusers() {
  declare -i I=1
  while [ $I -le $1 ]; do
    INDEX=$((RANDOM%28))
    comp ${USERS[$INDEX]}
    if [ $? -eq 1 ];then
      continue
    else
      let $((I++))
    fi
  done
}

pickgrps() {
  declare -i I=1
  while [ $I -le $1 ]; do
    INDEX=$((RANDOM%5))
    comp ${GRPS[$INDEX]}
    if [ $? -eq 1 ];then
      continue
    else
      let $((I++))
    fi
  done
}

while getopts ":u:g:hv" SWITCH; do
  case $SWITCH in
    v)
      echo "Version: 0.0.01, Reporting Debug: oranix@126.com" ;;
    h)
      echo "Usage: `basename $0` -v -h -u [user_nums] -g [group_nums]" ;;
    g)
      echo "Congratulations, the following:"
      pickgrps $OPTARG ;;
    u)
      echo "Congratulations, the following:"
      pickusers $OPTARG ;;
    *)
      echo "Usage: `basename $0` -v -h -u [user_nums] -g [group_nums]" ;;
  esac
done

注:RANDOM是系统自带的一个随机变量,RANDOM%28可以随机取到1-27的数值RANDOM%5可以随机取到1-4的任意一个值。

解析:此程序可以随机选取1-5的任意到个组:bash pickug.sh –g 3可以取到任意三组

         还可以随机选人到个人: bash pickug.sh –u 5(随机选取五个人)

2。循环对比,数组中的值全部一样(comp.sh)

#!/bin/bash
# Script Name: comp.sh
# Author: Our RHCE Team
# Version: 0.0.01
# Created Time: 07/14/10 14:56:43
declare -a USERS
SAME=0

comp() {
  local let I=0
  if [ ${#USERS[*]} -gt 0 ]; then
  while [ $I -le ${#USERS[*]} ];do
    [ "$1" == "${USERS[$I]}" ] && SAME=1 && break
    let $((I++))
  done
  fi
if [ $SAME -eq 0 ]; then
   INDEX=$[${#USERS[*]}+1]
   USERS[$INDEX]=$1
   echo ${USERS[$INDEX]}
   return 0
  else
    return 1
  fi
}

comp Jerry
comp Jerry

echo ${USERS[0]}
echo ${USERS[1]}

  3.