Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2517875
  • 博文数量: 540
  • 博客积分: 11289
  • 博客等级: 上将
  • 技术积分: 6160
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-11 20:27
个人简介

潜龙勿用,见龙在田

文章分类

全部博文(540)

文章存档

2018年(2)

2013年(5)

2012年(24)

2011年(104)

2010年(60)

2009年(217)

2008年(128)

分类: LINUX

2009-10-27 11:05:11

当定义函数时,
1. 里面尽量不要使用脚本位置参数$1,$2...,我调试的结果是,无法识别函数里面的这些符号;
2. 不要使用 awk 引用系统变量,也是不能识别。
#!/bin/sh
EXC1='--exclude bill/*'
EXC2='--exclude log/*'
EXC3='--exclude *core*'
SSHD='-e /app/oslinkd/bin/ssh'
ARG='-avzn'
RSYNC="rsync $ARG ${EXC1} ${EXC2} ${EXC3} ${SSHD}"
PWD=`pwd`
CHECKLIST="$PWD/checklist.txt"
TYPE=`awk '!/^#/{print $1}' $CHECKLIST|sort|uniq`
SRVTYPE=$1

if [ $# -lt 1 -o $# -gt 1 ];then
 echo "Usage: $0 [all] | [logic-01|hall-01|...]"
 exit
fi
FUN_RSYNC(){
 IP=`grep -i "$SRVTYPE" serversdmz.txt|awk '!/^#|^$/{print $2}'`
 RPATH=`grep -i "$SRVTYPE" $CHECKLIST|awk '{print $2}'`
 LPATH=`grep -i "$SRVTYPE" $CHECKLIST|awk '{print $3}'`
 echo "-----------/$SRVTYPE $IP/-------------"
 $RSYNC $IP:${RPATH} $PWD/default/$LPATH
 }
case $1 in
      all)       
 for i in `echo $TYPE`
 do
  IP=`egrep -i "$i" serversdmz.txt|awk '!/^#|^$/{print $2}'`
  RPATH=`awk '/'"$i"'/{print $2}' $CHECKLIST`
  LPATH=`awk '/'"$i"'/{print $3}' $CHECKLIST`
  echo "-----------/$i $IP/-------------"
  $RSYNC $IP:${RPATH} $PWD/default/$LPATH
 done ;;
    act-01)
        FUN_RSYNC ;;
     ap-01)
        FUN_RSYNC ;;
catalog-01)
        FUN_RSYNC ;;
catalog-02)
        FUN_RSYNC ;;
dbcache-01)
        FUN_RSYNC ;;
dbcache-02)
        FUN_RSYNC ;;
 family-01)
        FUN_RSYNC ;;
     gm-01)
        FUN_RSYNC ;;
   hall-01)
        FUN_RSYNC ;;
   hall-02)
        FUN_RSYNC ;;
  logic-01)
        FUN_RSYNC ;;
  logic-02)
        FUN_RSYNC ;;
  logic-03)
        FUN_RSYNC ;;
 market-01)
        FUN_RSYNC ;;
 market-02)
        FUN_RSYNC ;;
    pay-01)
        FUN_RSYNC ;;
 router-01)
        FUN_RSYNC ;;
  state-01)
        FUN_RSYNC ;;
    syn-01)
        FUN_RSYNC ;;
     ui-01)
        FUN_RSYNC ;;
           *)
        echo "Usage: $0 [all] | [logic-01|hall-01|...]"
        exit;;
esac
#Script END

此脚本中的SRVTYPE变量我原来是没有的,都是直接用的$1;
RPATH,LPATH变量原来是这样写的:
RPATH=`awk '/'"$1"'/{print $2}' $CHECKLIST`
LPATH=`awk '/'"$1"'/{print $3}' $CHECKLIST`
不生效,改成如下写法,同样也不生效。
RPATH=`awk '/'"$SRVTYPE"'/{print $2}' $CHECKLIST`
LPATH=`awk '/'"$SRVTYPE"'/{print $3}' $CHECKLIST`
也就是说,在定义函数时awk引用系统变量的用法都无法识别了,但是在函数外部这样用是没有问题的。所以最好在函数内部不要这样使用。原因是函数本身有自身的位置参数,在函数内部使用位置参数是代表函数本身的位置参数。
阅读(1000) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~