日期:2014-05-16  浏览次数:20715 次

请教大家一个字符串相关的shell脚本问题
#!/bin/sh
while read line
do
  rt="iosncd -A -o /bin/"$line" -j DEWR"
  echo $rt
done < test.txt

其中test.txt内容为:
alsacard
alsaunmute
arch
basename
bash
cat
chgrp
chmod
chown
cp
cpio
cut
date
dbus-cleanup-sockets
dbus-daemon
dbus-monitor
dbus-send
dbus-uuidgen
dd
df
......
.......

运行结果为:
-j DEWRA -o /bin/alsacard
-j DEWRA -o /bin/alsaunmute
-j DEWRA -o /bin/arch
-j DEWRA -o /bin/basename
-j DEWRA -o /bin/bash
-j DEWRA -o /bin/cat
-j DEWRA -o /bin/chgrp
-j DEWRA -o /bin/chmod
-j DEWRA -o /bin/chown
-j DEWRA -o /bin/cp
-j DEWRA -o /bin/cpio
-j DEWRA -o /bin/cut
-j DEWRA -o /bin/date
-j DEWRA -o /bin/dbus-cleanup-sockets
-j DEWRA -o /bin/dbus-daemon
-j DEWRA -o /bin/dbus-monitor
......................
.....................

与预期的不符合啊,预期结果应该是:
iosncd -A -o /bin/alsacard -j DEWR
............................
...........................
大家帮我看看 谢谢了。。。 



------解决方案--------------------
rt="iosncd -A -o /bin/${line} -j DEWR"

------解决方案--------------------
你看 这是在我这里的运行结果
C# code

iosncd -A -o /bin/alsacard -j DEWR
iosncd -A -o /bin/alsaunmute -j DEWR
iosncd -A -o /bin/arch -j DEWR
iosncd -A -o /bin/basename -j DEWR
iosncd -A -o /bin/bash -j DEWR
iosncd -A -o /bin/cat -j DEWR
iosncd -A -o /bin/chgrp -j DEWR
iosncd -A -o /bin/chmod -j DEWR
iosncd -A -o /bin/chown -j DEWR
iosncd -A -o /bin/cp -j DEWR
iosncd -A -o /bin/cpio -j DEWR
iosncd -A -o /bin/cut -j DEWR
iosncd -A -o /bin/date -j DEWR
iosncd -A -o /bin/dbus-cleanup-sockets -j DEWR
iosncd -A -o /bin/dbus-daemon -j DEWR
iosncd -A -o /bin/dbus-monitor -j DEWR
iosncd -A -o /bin/dbus-send -j DEWR
iosncd -A -o /bin/dbus-uuidgen -j DEWR
iosncd -A -o /bin/dd -j DEWR

------解决方案--------------------
#!/bin/sh
while read line
do
---echo "$line"--------打印一下试试!
rt="iosncd -A -o /bin/"$line" -j DEWR"
echo $rt
done < test.txt




还有,lz如果不知道,可以使用 sh -x test.sh 查看具体的过程(一般调试shell用-x)



------解决方案--------------------
用单引号试一下

------解决方案--------------------
我用的CentOS5.3测试的 应该和你的环境很接近啊 只不过你的是64位的
你是把你的代码直接复制上来的么
我就奇怪输出怎么后面跑前面去了
------解决方案--------------------
改成这样试试
C/C++ code

#!/bin/sh
while read line
do
  echo "iosncd -A -o /bin/${line} -j DEWR"
done < test.txt

------解决方案--------------------
你sh -x test.sh之后的结果 明显是不对的
我有点怀疑你执行的程序跟你给的是一样的么?
C/C++ code

#!/bin/sh
while read line
do
      rt='iosncd -A -o /bin/'"${line}"' -j DEWR'
      echo "${rt}"
done < test.txt