这条语句单独执行,是没有问题的,可是放到shell里面,就会报错。怎么回事?
发表于 : 2012-04-02 17:47
代码: 全选
#!/bin/bash
mode=1
home=""
if [ "$1" = "INIT" ]; then
mode=2
home=$2
else
if [ "$1" = "START" ]; then
echo "starting"
mode=0
home=$2
else
size=40 #unused in this program
x=$1
y=$2
selectedgroup=$3
raisemode=$4
home="$5"
fi
fi
if [ -z $home ]; then
echo "fatal error: no /home/xxx found!"
exit
fi
home="$home/.iconmenu2/bin"
cd $home
i=0
gc=0
s=""
while read buffer
do
if [ -n "$buffer" ]; then
if [ "${buffer:0:1}" != "#" ]; then
if [ "${buffer:0:11}" = "baseconfig:" ]; then
buffer0=${buffer#baseconfig:}
xmain=`echo $buffer0|awk '{ print $1;}'`
ymain=`echo $buffer0|awk '{ print $2;}'`
sizemain=`echo $buffer0|awk '{ print $3;}'`
gapmain=`echo $buffer0|awk '{ print $4;}'`
sizesub=`echo $buffer0|awk '{ print $5;}'`
gapsub=`echo $buffer0|awk '{ print $6;}'`
raisemode=`echo $buffer0|awk '{ print $7;}'`
autohidemainbutton=`echo $buffer0|awk '{ print $8;}'`
autohideSubbutton=`echo $buffer0|awk '{ print $9;}'`
fi
if [ "${buffer:0:5}" = "group" ]; then
group=`echo $buffer|awk '{ print $1;}'`
result=${buffer#$group}
group=${group#group}
group=${group%#}
if [ $mode -eq 2 ]; then
echo "./iconrun1" $xmain $[ $ymain+$[ $gc * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $group $result $autohidemainbutton $autohideSubbutton
`echo "./iconrun1" $xmain $[ $ymain+$[ $gc * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $group $result $autohidemainbutton $autohideSubbutton ` &
exit
fi
if [ $mode -eq 0 ]; then
if [ $group -gt 0 ]; then
echo "./iconrun2 " $xmain $[ $ymain+$[ $[ $gc+1 ] * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $group $result
`echo "./iconrun2 " $xmain $[ $ymain+$[ $[ $gc+1 ] * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $group $result ` &
let "gc=$gc+1"
fi
fi
else
if [ "${buffer:0:6}" = "single" ]; then
if [ $mode -eq 0 ]; then
group=`echo $buffer|awk '{ print $1;}'`
result=${buffer#$group}
group=${group#single}
group=${group%#}
if [ $group>0 ]; then
if [ $autohideSubbutton -eq 0 ]; then
echo "./iconrun2c" $xmain $[ $ymain+$[ $[ $gc+1 ] * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $result &
`echo "./iconrun2c" $xmain $[ $ymain+$[ $[ $gc+1 ] * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $result ` &
else
echo "./iconrun2d" $xmain $[ $ymain+$[ $[ $gc+1 ] * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $result
`echo "./iconrun2d" $xmain $[ $ymain+$[ $[ $gc+1 ] * $[ $sizemain+$gapmain ] ] ] $sizemain $sizemain $raisemode $result ` &
fi
let "gc=$gc+1"
fi
fi
else
if [ $mode -eq 1 ]; then
if [ $group -eq $selectedgroup ]; then
if [ $autohideSubbutton -eq 0 ]; then
echo "./iconrun2a" $[ $x+$gapsub+$[ $[ $sizesub+$gapsub ] * $i ] ] $[ $y-$[ $[ $sizesub-$sizemain ] / 2 ] ] $sizesub $sizesub $raisemode $buffer
`echo "./iconrun2a" $[ $x+$gapsub+$[ $[ $sizesub+$gapsub ] * $i ] ] $[ $y-$[ $[ $sizesub-$sizemain ] / 2 ] ] $sizesub $sizesub $raisemode $buffer ` &
else
echo "./iconrun2b" $[ $x+$gapsub+$[ $[ $sizesub+$gapsub ] * $i ] ] $[ $y-$[ $[ $sizesub-$sizemain ] / 2 ] ] $sizesub $sizesub $raisemode $buffer
`echo "./iconrun2b" $[ $x+$gapsub+$[ $[ $sizesub+$gapsub ] * $i ] ] $[ $y-$[ $[ $sizesub-$sizemain ] / 2 ] ] $sizesub $sizesub $raisemode $buffer ` &
fi
let "i=$i+1"
fi
fi
fi
fi
fi
fi
done < ../menu.rc
这是配置语句的一行,里面用了(双引号)作为转义符,一行作为iconrun2b的参数出现,形成下面的命令:/usr/share/icons/oxygen/48x48/devices/media-optical-dvd-video.png "dragon" "Dragon 媒体播放"
代码: 全选
./iconrun2c 100 864 64 64 1 /usr/share/icons/oxygen/48x48/devices/media-optical-dvd-video.png "dragon" "Dragon 媒体播放"
意思是参数数目不对。usage: iconrun2c x y width height lower/raise(0/1) image applicationToRun title
其实,这条语句单独执行,是没有问题的,可是放到shell里面,一旦遇到双引号里面有空格的,就会报错。
请帮助,谢谢!!