Chinaunix

标题: 求解?Shell以参数作为变量名的一部分 [打印本页]

作者: rong341233    时间: 2015-01-16 13:36
标题: 求解?Shell以参数作为变量名的一部分
有变量:
BASEDIR=/data/svn
BASETMP=/tmp/base
ADVDIR=/data/cdn
ADVTMP=/tmp/adv

要运行脚本sh test.sh BASE
现在我需要根据$1来获取信息
DIR=$1\DIR
$(eval echo \$DIR)只能显示BASEDIR,而不是目录

请问这里需要怎么设置。

真实情景:
REALSE=(
        rsync@192.168.100.222@www@/etc/rsyncd/passwd
        rsync@192.168.100.223@www@/etc/rsyncd/passwd
)
BETA=(
        rsync@192.168.100.248@www@/etc/rsyncd/passwd
)
REALSETMP="/home/svn/realsetmp"
BETATMP="/home/svn/betatmp"


if [[ $1 = 'REALSE'  || $1 = 'BETA' ]];then


for ((i=0;i<$(eval echo \${#${1}[@]});i++))
do

        [ $(echo $(eval echo \${${1}[$i]})|awk -F'@' '{print NF-1}') -eq 3 ] || {
                echo "arameter Error"
                echo "lease Setup Config File"
                exit 2
        }
        user=$(echo $(eval echo \${${1}[$i]})|awk -F@ '{print $1}')
        host=$(echo $(eval echo \${${1}[$i]})|awk -F@ '{print $2}')
        share=$(echo $(eval echo \${${1}[$i]})|awk -F@ '{print $3}')
        passwd=$(echo $(eval echo \${${1}[$i]})|awk -F@ '{print $4}')
        echo "`date +'%Y-%m-%d %H:%M:%S'` rsync to $host">>$LOG
        /usr/bin/rsync --delete-before -avP $(eval echo \$DIR)  $user@$host:share --password-file=$passwd >>$LOG 2>&1
        if [ $? -eq 0 ];then
                echo "`date +'%Y-%m-%d %H:%M:%S'` $host  Rsyncd OK">>$LOG
        else
                echo "`date +'%Y-%m-%d %H:%M:%S'` $host  Rsyncd Falied">>$LOG
                echo -e "\033[31m\033[05m`date +'%Y-%m-%d %H:%M:%S'` $host  Rsyncd Failed\033[0m"
        fi
done

作者: liion631818    时间: 2015-01-16 13:44
本帖最后由 liion631818 于 2015-01-16 13:45 编辑
  1. px@ubuntu:~/bash-script$ a=b
  2. px@ubuntu:~/bash-script$ bc=xxxxxx
  3. px@ubuntu:~/bash-script$ eval c=\$${a}c
  4. px@ubuntu:~/bash-script$ echo $c
  5. xxxxxx
复制代码
回复 1# rong341233


   
作者: rong341233    时间: 2015-01-16 13:57
回复 2# liion631818

非常感谢   已解决


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2