2013-02-09 126 views
0

我想知道什么是在下面的脚本误差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 " " 
+0

ⅰ)除去; ii)检查FTP是否在192.168.1.2 – Satya 2013-02-09 04:35:56

+0

上运行,你写了“但现在正在工作......”,你的意思是不工作......?请编辑您的问题,以包括几个错误消息的精确复制/粘贴。我不能相信操作系统正在打印'command not foundh'。祝你好运。 – shellter 2013-02-09 04:40:42

+0

你如何执行脚本? – wich 2013-02-09 04:56:35

回答

7

你得到有趣的输出的事实是,你的脚本在线路末端有回车(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将是一个没有违规人物。

+0

我真的不要忍受你在说什么好心的给我解释一下 – Nokia808Freak 2013-02-09 04:58:29

+0

@ Nokia808Freak,扩展了一下,希望有所帮助。 – paxdiablo 2013-02-09 05:05:27

+0

您好我得到的回应,因为这TR -d“\ r” loginalertinstall.sh> newloginalert.sh TR:不受挤压重复删除时,可能会给予额外的操作'loginalertinstall.sh” 只有一个字符串。 尝试'tr --help'以获取更多信息。 – Nokia808Freak 2013-02-09 05:08:54

1

一个工具,你可以用它来了解什么是这个脚本的执行发生,以调试是命令,

bash -x scriptname.sh 
0

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

which bash 
+0

它给放出来的/斌/庆典 – Nokia808Freak 2013-02-09 04:48:11

+0

你用什么编辑器编写脚本?我能想到的唯一可能性是Linux以某种方式无法识别#!/ bin/bash,因为隐藏字符,通常是换行符。 – simoncpu 2013-02-09 04:50:57

+0

在Windows – Nokia808Freak 2013-02-09 04:59:29

1

paxdiablo几乎肯定是正确的:您需要修复行结束符。但是你的第一行也有一个错误的分号。相反的:

#!/bin/bash; 

你想:

#!/bin/bash 

没有尾随分号。

0

paxdiablo和威廉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." 

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

man bash 
man tempfile 
man wget 
man unzip 
man chmod 
+0

感谢威廉!这是正确的。 – dschulz 2013-02-09 14:35:15