2

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

我得到错误: 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 " "
4

5 回答 5

13

您得到有趣的输出这一事实肯定是您的脚本在行尾有回车 (CR) 字符,这通常是使用假定行尾应该是 CR/LF 而不仅仅是 CR/LF 的 Windows 编辑器的症状标准 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以查看实际输出。例如,我创建了一个文件,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将是一个没有冒犯性角色的人。

于 2013-02-09T04:51:07.080 回答
1

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

bash -x scriptname.sh
于 2013-02-09T04:40:44.943 回答
1

paxdiablo 几乎可以肯定是正确的:您需要修复行尾。但是您在第一行中也有一个错误的分号。代替:

#!/bin/bash;

你要:

#!/bin/bash

没有尾随分号。

于 2013-02-09T05:23:23.617 回答
0

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

which bash
于 2013-02-09T04:46:33.813 回答
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
于 2013-02-09T06:21:06.563 回答