Bash脚本出错

时间:2013-02-09 04:32:38

标签: linux bash

我想知道下面脚本中的错误是什么

我的错误为: command not foundh: line 1:: command not foundh: line 2:为连续

我试过添加;但是现在好好告诉我该怎么做??

#!/bin/bash;
clear;
FILEREPO=http://192.168.1.2/cpplugin;

echo "-----------------------------------------------";
echo " Welcome to C-Panel Login Alert Installer";
echo "-----------------------------------------------";
    cd /var/cpanel/;
    mkdir perl5
    cd perl5/
    mkdir lib
    cd lib/
    wget $FILEREPO/LoginAlerthook.zip
    unzip LoginAlerthook.zip
    rm -r LoginAlerthook.zip
    cd /
    /usr/local/cpanel/bin/manage_hooks add module LoginAlert
    chmod 777 LoginAlert.pm
    echo " "
    echo " Login Alert Script Hooked With C Panel Finished"
    echo " "

5 个答案:

答案 0 :(得分:10)

您获得有趣输出的事实肯定是您的脚本在行尾有回车(CR)字符,通常是使用Windows编辑器的症状,假设行结尾应为CR / LF而不仅仅是标准的UNIX LF(换行)。这导致错误输出,如:

this_command_ends_hh<CR>: command not found

因为CR将光标放回到行开头,所以它会覆盖其中一些:

this_command_ends_hh<CR>
: command not found

制造:

: command not foundh

使用od -xcb scriptname检查您的脚本以检查CR(显示为\r)个字符,您还可以通过od -xcb管道输出脚本以查看 real 输出。例如,我使用hello创建的文件,后跟唯一一行的回车符:

0000000    6568    6c6c    0d6f    000a
          h   e   l   l   o  \r  \n
        150 145 154 154 157 015 012
0000007

您可以在那里看到CR(\r)。

如果 问题,只需删除CR字符,例如通过tr -d '\r'进行管道处理。

执行cat hello.txt | tr -d '\r' | od -xcb表明你可以摆脱它:

0000000    6568    6c6c    0a6f
          h   e   l   l   o  \n
        150 145 154 154 157 012
0000006

在您的情况下,假设您的脚本名为freak.bash,您将使用:

tr -d '\r' <freak.bash >newfreak.bash

newfreak.bash将是没有违规字符的那个。

答案 1 :(得分:1)

可用于了解执行此脚本以进行调试的工具是命令,

bash -x scriptname.sh

答案 2 :(得分:1)

paxdiablo几乎肯定是正确的:您需要修复行结尾。但是你在第一行也有一个错误的分号。而不是:

#!/bin/bash;

你想要:

#!/bin/bash

没有尾随的分号。

答案 3 :(得分:0)

我现在没有Centos 5,但也许......也许...... bash不在/ bin?在FreeBSD中,它位于/ usr / local / bin。在Cygwin中,它位于/ usr / bin。这个命令的输出是什么:

which bash

答案 4 :(得分:0)

paxdiablo和William Pursell很好地解释了问题所在。

现在,如果您要分发它,请花点时间改进您的脚本。

未经过测试示例:

#/bin/bash

ZIPFILE=http://192.168.1.2/cpplugin/LoginAlerthook.zip
CPANEL_LIBDIR=/var/cpanel/perl5/lib
MANAGE_HOOKS_CMD=/usr/local/cpanel/bin/manage_hooks

TMPFILE=`tempfile`

function exit_with_error(){
   echo "$*" >&2   # Write error messages to stderr!!
   exit 1
}

function at_exit(){
  [ -f "${TMPFILE}" ] && rm -v ${TMPFILE}
}

# Run at_exit function when script finishes
trap at_exit 0

echo "WELCOME TO ZOMBO.COM"

# Create lib directory if not exists, exit if not possible
if ! [ -d "${CPANEL_LIBDIR}" ]; then
     mkdir -p ${CPANEL_LIBDIR} || exit_with_error "Couldn't create required directory [${CPANEL_LIBDIR}]"
fi

wget ${ZIPFILE} -O ${TMPFILE} || exit_with_error "Couldn't download file"
unzip -d ${CPANEL_LIBDIR} ${TMPFILE} || exit_with_error "Couldn't unzip file"
chmod +x ${CPANEL_LIBDIR}/LoginAlert.pm || exit_with_error "Couldn't chmod file" 
$MANAGE_HOOKS_CMD add module LoginAlert

echo "End."

这只是一个肮脏的例子。阅读手册以改进。

man bash
man tempfile
man wget
man unzip
man chmod