2013-10-28 139 views
0

好吧,所以我不是很好的.sh和.bat腳本,但我需要翻譯一個.bat文件到.sh,並希望我可以在這裏得到一些幫助。蝙蝠Sh翻譯請

文件名是booyaka.sh

#!/bin/sh 
:START 
REM what to put below: 
REM perl m2auto.pl user pass wait chartype "Lord Stealer" 
REM wait = 0.0 for most 
REM chartype: 1 = agimage, 2 = fighter, 3 = mage, 4 = Pure Fighter 
REM stealer must have full name 
perl m3.pl user password 0.0 1 "Stealer" 
perl -e sleep(2) 
goto START 

那是什麼我的腳本看起來像當前,但由於某些原因,當我嘗試./booyaka.sh在終端它返回如下:bash下./booyaka。 sh:沒有這樣的文件或目錄

如果我在存儲文件的目錄內導航並嘗試從那裏執行,它會返回:bash:./booyaka.sh:/ bin/sh^M:糟糕的解釋器:沒有這樣的文件或目錄

任何有識之士,我在做什麼不正確y?

+0

它起源於批處理文件,我不知道如何完全翻譯它,你能提供更多的信息嗎? – user2926415

+0

不要翻譯'.bat'文件,而是從頭開始編寫'.sh' shell腳本....閱讀[高級Bash腳本指南](http://www.tldp.org/LDP/abs/html /)... –

+0

將腳本翻譯完成後,您還有其他一些事情需要解決:您在文件中使用了Windows回車代替UNIX。用你的編輯器改變或者用'tr'命令查看如何做。同時檢查文件的權限並在必要時執行'chmod u + x'。您還可以創建一個'scripts'文件夾,它是您定義的'$ PATH'的一部分,並將腳本放在那裏,以便它可以從任何目錄中找到,而不僅僅是它自己的。 – beroe

回答

5

評論

在批處理文件中,評論用REM表示。在bash中,他們表示有#

# This is a comment! 

循環

批處理文件實現使用標籤和GOTO循環。 Bash有更多的結構化循環。在你的情況,你可能需要一個while循環:

while true; do 
    # stuff 
done 

簡單的命令

在批處理文件中,你只寫命令。在Bash中是一樣的。您可以不改變您的perl行。

行結束

批處理文件中使用DOS行結束(CRLF)。據我所知,Bash並不在乎,但對於第一行(對Bash的評論),操作系統確實如此。您的第一行必須以LF而不是CR作爲終止UNIX樣式。

+0

@ user2926415:在您的批處理文件中,您以':START'開頭。這是你將返回的地方。你用'goto START'結束它,返回到開始。顯然,內部位會重複多次。要在Bash中做到這一點,你不會使用'goto's,而是用'while true'來包圍要重複的位。在上面和下面做'完成'。 – icktoofay

+0

@ user2926415:是;用'while替換':START' true;做''和'goto START'並帶'done'。 – icktoofay

+0

@ user2926415:哎呀! 「睡(2)」需要用引號括起來,比如「sleep(2)」'。你也可以選擇用'sleep 2'替換整個'perl -e sleep(2)'行。 – icktoofay