2013-02-09 101 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