红联Linux门户
Linux帮助

shell变量问题

发布时间:2011-04-08 14:53:08来源:红联作者:theegg
[i=s] 本帖最后由 theegg 于 2011-4-11 18:23 编辑 [/i]

我有两个shell文件
1. main.sh
_active=10; # 赋值
. function.sh # 调用函数文件
change_var # 执行函数

2. function.sh
change_var() {
_active=200;
}

我执行main.sh

为什么 _active的值没有变
===========================================
谢谢 相思爱文的回答。
我把问题详细描述下, 因为我是刚开始学习shell , 可能描述的不好

1. 我想做一个命令,把所有常用的命令都集成到一起,比如 ./ben.sh db -a add -d 'dbname',
2. 文件结构
~/ben.sh
~/include/function/init.sh
~/include/function/db/db.sh
~/logs/
3. 文件代码

ben.sh
-----------------------
#!/bin/bash

###########################
# ubuntu 10.10

###########################
# init variable
declare -a _ITEMS=('db' 'user' 'install');

# init db
declare -a _db_act=('login' 'import' 'dump' 'drop' 'add' 'user');
_db_active='login';
export _db_active;
declare -x _db_user='root';
declare -x _db_pass='123456';
declare -x _db_database='';
declare -x _db_new_user='';

# init user

###########################
# init function
. $PWD/include/function/init.sh;

###########################
# 检查用户权限

_USER_NAME=$(whoami);
if [ ${_USER_NAME} = 'root' ]; then
_c_msg "---->";
else
_c_msg "当期登录用户${_USER_NAME}, 需要切换到root用户";
exit 1;
fi

#########################
# 参数
for item in ${_ITEMS}
do
if [ $item = $1 ]
then
_c_include "$item";
_c_getopts "$item";
fi
done


include/function/init.sh
----------------------------------
#!/bin/bash

###########################
# 一些普通函数
# 输出信息
_c_msg() {
echo '-->'$1;
}

# 输出日志
_c_log() {
echo "sdf";
}

# 定向参数
_c_getopts() {
_$1_getopts
}

# 加载函数
_c_include() {
for file in $(ls $PWD/include/function/$1/)
do
if [ -x $file ]
then
chmod 777 $PWD/include/function/$1/$file;
fi
. $PWD/include/function/$1/$file;
done;
}



~/include/function/db/db.sh
-------------------------------
#!/bin/bash

# 参数分配
_db_getopts() {
echo "123";
while getopts a:u:p:d:nu: db_arg
do
case "$db_arg" in
a) _db_active=${OPTARG}; export _db_active ;;
u) _db_user=${OPTARG} ;;
p) _db_pass=${OPTARG} ;;
d) _db_database=${OPTARG} ;;
nu) _db_new_user=${OPTARG} ;;
esac
done
echo $_db_active;
'_db_'"$_db_active";
}

#############################
# Function
_db_help() {
echo "-";
}

_db_install() {
echo "-";
}

_db_login() {
mysql -u${_db_user} -p${_db_pass};
}

_db_import() {
echo "-";
}

_db_dump() {
echo "-";
}

_db_drop() {
echo "-";
}

_db_add() {
mysql -u${_db_user} -p${_db_pass} -e "create database ${_db_datebase}"
}

_db_user() {
echo "-";
}


4. 问题
当我执行./ben.sh db -a add -d test, _db_active这个变量无法通过参数获得值,其他参数也是一样, 这个变量是在起始脚本定义的。 在子脚本里,无法赋值么?

跪求高人 给新手一个指点,
文章评论

共有 4 条评论

  1. ruofeng216 于 2011-04-16 20:47:31发表:

    学习

  2. ruofeng216 于 2011-04-16 20:47:22发表:

    学习

  3. theegg 于 2011-04-12 16:03:27发表:

    我自己顶上去
    我想在子脚本里修改父脚本的值

  4. 相思爱文 于 2011-04-08 21:24:58发表:

    多个文件共用,变量前加export声明