Bourne Shell编程求助

最近接手一段程序,需要用Bourne Shell实现,请哪位高手帮忙解决一下。
从外部文件读取如下的文字列后,需要进行一些处理,比如:
文字列格式为:${MY_PATH}/AAA/BBB
已经预定义过的变量MY_PATH=/root/app
1、现在需要把文字列${MY_PATH}/AAA/BBB展开为/root/app/AAA/BBB的形式,请问该如何实现?
2、判断展开后的文字列是否包含了空格或tab。
我把一部分代码传上来。
#!/bin/sh
# Read common definitions and functions
. `dirname $0`/common.fnc
DELETE_LIST=$1
result=0

deleteDirectory() {
directory=$1
#1 TODO
#2 判断路径里面是否包含有空格和tab。
echo $directory | egrep '[ ]'
if [ $? -eq 0 ]; then
echo "Illegal directory!" >&2
result=1
return
fi
}

# main routine
if [ ! -f "${DELETE_LIST}" ]; then
echo "File not exsit!" >&2
exit 3
fi
exec 3< ${DELETE_LIST}
while read -u3 directory; do
deleteDirectory $directory
done
exec 3<&-
exit $result
因为读取的文件里面是一些系列诸如${PATH1}/XXX、${PATH2}/YYY的文字列,而${PATH1}、${PATH2}这些变量是统一在common.fnc文件里定义的。
例如:
common.fnc里面定义:PATH1 = /opt/app
读取的文件内容:${PATH1}/XXX
那么在#1这一步时,期望把变量directory里面的内容变为/opt/app/XXX,然后再判断路径是否符合要求;而不是去判断${PATH1}/XXX是否符合要求。

第1个回答  2009-07-03
MY_PATH=${MY_PATH}/AAA/BBB
可以用sed把空格都删掉,要判断有没有可以用sed处理过的和没处理的比较一下就知道了

-----------------------------
是这个意思吗
有一个文件f12.1
devil@devil-desktop:~/bash/lx$ cat f12.1
${MY_PATH}/mytest1
${MY_PATH}/mytest2
${MY_PATH}/mytest3

你要把它的内容变成
/home/app/test/mytest1
/home/app/test/mytest2
/home/app/test/mytest3

用命令 sed 's#${MY_PATH}#/home/app/test#g' f12.1
即可。

你最好把你要修改的原始文件贴上来一段我看看,比较好处理。
另外line里面是每行的内容.如果用whlie麻烦一点,这样写
while read line;do echo ${line/*\//\/home\/app\/test/};done<f12.1
第2个回答  2009-07-14
就用
directory=`eval echo $directory`

这属于变量间接引用,简单的例子:本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网