LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 805|回复: 6

一个很奇怪的现象,echo 以后为什么后面的又重头开始显示了?

[复制链接]
发表于 2006-5-15 16:14:21 | 显示全部楼层 |阅读模式
#!/bin/bash
echo "Executing /etc/init.d/rc.........................."
echo '$1=' $1
echo ""
echo ""
PATH=/sbin:/bin
export PATH
SCRIPT_DIR="/etc/rc$1.d"
echo "          SCRIPT_DIR=      "  "$SCRIPT_DIR"            
echo "$SCRIPTDIR"                             
echo ""
            
if [ -d "$SCRIPT_DIR" ]; then
        echo "in if .................."
        for SCRIPT in $SCRIPT_DIR/K*
        do
        echo "in for.................."
        if [ -x $SCRIPT ]; then
                echo "SCRIPT=" $SCRIPT                                       
                $SCRIPT stop
        fi
        done
       
        for SCRIPT in $SCRIPT_DIR/S*
        do
        if [ -x $SCRIPT ]; then
                echo "SCRIPT=" $SCRIPT                               
                $SCRIPT start
        fi
        done
fi
#end of file
这是我的一个最小系统的启动脚本. 然而启动的时候显示是
INIT: version 2.86 booting
Executing /etc/init.d/rc.........................
$1= S


.d          SCRIPT_DIR=      /etc/init.d/rcS                ##应该是/etc/init.d/rcS.d
INIT: Entering runlevel:  2
Executing /etc/init.d/rc.........................
$1= 2


.d          SCRIPT_DIR=      /etc/init.d/rc2                ##应该是/etc/init.d/rc2.d

下面是login:的提示符
我实在是想不能怎么样把$SCRIPT_DIR显示出来,我以前是这样写的
echo '$SCRIPT_DIR'= $SCRIPT_DIR
还是不行,然后又把后面的$SCRIPT_DIR加上双引号,写成这样"$SCRIPT_DIR",可是也不行.
因为我要根据这个显示信息查看脚本的下面内容有没有执行,很显然这里是没有执行.

我以前在echo "          SCRIPT_DIR=      "  "$SCRIPT_DIR"            这行里是没有那么多空格的,如果没有那么多空格,则显示后就成下面的样子
.dRIPT_DIR=/etc/init.d/rcS
好头疼啊!
请各位指点一下.万分感谢!
发表于 2006-5-16 22:37:58 | 显示全部楼层
看起来你的$1的值有问题。
在最后跟了一个回车符。
你的“/etc/init.d/rcS.d”就变成“/etc/init.d/rcS\r.d”
可以试一下。
a=`echo $1|sed 's/\r//'`
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-17 09:26:44 | 显示全部楼层
听起来有些道理,$1 含有一个回车,这样就可以反前面两个字符替换掉,但是既然是回车,那为什么不另起一行,而是在原来那一行上呢?

我的简单的系统里还没有sed的功能.呵呵
见笑了.
谢谢lastart的回答!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-17 10:15:30 | 显示全部楼层
我定义了一个变量var="2"
然后这样比较了一下
if [ $var=$1 ]; then
            echo "They are equal !"
else
             echo "They are not equal!"
fi
当进入runlevel 2的时候,显示是"They are equal !"
这样看来$1中并没有回车啊.
不知道我这样说对不对?
请指教!
回复 支持 反对

使用道具 举报

发表于 2006-5-17 19:00:57 | 显示全部楼层
我还是认为是带了回车符,因为回车不是换行.
所以又跑到行前面.
一般情况下.参数里是不会有这个回车符的.
我不知道在启动的时候跟平时有什么区别.把回车符也加进去了.
你没有sed 可以用这个.

b=`echo -e "\r"`
a=${1/$b/}
再试试.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-18 09:08:26 | 显示全部楼层
非常感谢!
我试试!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-18 10:33:08 | 显示全部楼层
感谢lastart的建议.成功了!
两天啊,就为了一个回车.呵呵
我是才开始学习shell的,还得多努力啊!
非常感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表