.BAT到.SH转换?

时间:2013-07-27 23:38:52

标签: linux windows batch-file sh

好吧,我写了一个bat文件,用于加载我的pokemon备份,当我离开我的gameboys时,但是我已经转换为linux而且我在我的exe中获取.BAT文件时遇到问题(我已经反编译了exe的源代码)作为.SH工作,我真的找不到如何使用shell命令作为它们在BAT文件中的相同功能:/我也很乐意知道如何设置SH文件加载出当前目录并在wine中运行所述程序。

这是我的.BAT文件,它在Windows下100%完美运行但拒绝在wine下运行或在wine下可移植的CMD提示

`:MENU
CLS

ECHO ============= RawX GBA's =============
ECHO -------------------------------------
ECHO 1.  Pokemon Crystal
ECHO 2.  Pokemon Green
ECHO 3.  Pokemon Gold
ECHO 4.  Pokemon Pikachu
ECHO 5.  Pokemon Ruby
ECHO 6.  Pokemon Chaos Black
Echo 7.  Pokemon Silver
ECHO 8.  Pokemon White (NDS)
ECHO 9.
Echo 10.
Echo 11.
Echo 12. Pokemon Black (NDS)
ECHO ==========PRESS 'Q' TO QUIT==========
ECHO.
color fc

SET INPUT=
SET /P INPUT=Please select a number:

IF /I '%INPUT%'=='1' GOTO Selection1
IF /I '%INPUT%'=='2' GOTO Selection2
IF /I '%INPUT%'=='3' GOTO Selection3
IF /I '%INPUT%'=='4' GOTO Selection4
IF /I '%INPUT%'=='5' GOTO Selection5
IF /I '%INPUT%'=='6' GOTO Selection6
IF /I '%INPUT%'=='7' GOTO Selection7
IF /I '%INPUT%'=='8' GOTO Selection8
IF /I '%INPUT%'=='9' GOTO Selection9
IF /I '%INPUT%'=='10' GOTO Selection10
IF /I '%INPUT%'=='11' GOTO Selection11
IF /I '%INPUT%'=='12' GOTO Selection12
IF /I '%INPUT%'=='Q' GOTO Quit

CLS

ECHO ============INVALID INPUT============
ECHO -------------------------------------
ECHO Please select a number from the Main
echo Menu [1-9] or select 'Q' to quit.
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======

PAUSE > NUL
GOTO MENU

:Selection1

:1
".\VisualBoyAdvance.exe"  ".\Pokemon Crystal.zip"
goto menu

:Selection2

:2
".\VisualBoyAdvance.exe"  ".\Pokemon Green.zip"
goto menu

:Selection3

".\VisualBoyAdvance.exe"  ".\Pokemon Gold.zip"
goto menu

:Selection4

".\VisualBoyAdvance.exe"  ".\Poke'mon Pikachu.zip"
goto menu

:Selection5

".\VisualBoyAdvance.exe"  ".\Pokemon Ruby.zip"
goto menu

:Selection6

".\VisualBoyAdvance.exe"  ".\Pokemon - Chaos Black.zip"
goto menu

:Selection7

".\VisualBoyAdvance.exe"  ".\Pokemon Silver.zip"
goto menu


:Selection8

".\desmume.exe"  ".\PokeWhite.zip"
goto menu

:Selection12

".\desmume.exe"  ".\PokeBlack.zip"
goto menu






:Quit
CLS

ECHO ==============THANK YOU===============
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======

PAUSE>NUL
EXIT`

1 个答案:

答案 0 :(得分:11)

转换为Bourne shell非常简单:

  1. 添加#!/bin/sh或类似的第一行,告诉Linux使用哪个解释器。与Windows不同,除了shell之外,还有多个命令shell和更多的脚本解释器。

  2. Linux上cmd.exe命令CLS的等效项为clear

  3. Linux区分大小写,因此您的所有ECHO必须为小写。如果我将IF语句保留在翻译版本中,那么它们也必须是小写的。

  4. shell脚本中的
  5. echo不仅仅是将所有内容打印到行尾,如cmd.exe中所示。 Bourne shell是一种更丰富的语言:它可以在将命令发送到命令之前对命令后出现的内容应用含义。在您的代码中,单引号(')和多个空格将无法在此命令处理中继续存在。

    为了避免此类问题,我引用了所有echo个字符串。我本可以有选择地完成它,只引用问题字符串,但选择双引号以保持一致性。我不希望你误以为Bourne shell 中的echo需要双引号。

    如果我对保持翻译简单不感兴趣,那么您可以在批处理文件和shell脚本之间看到更多的1:1对应关系,我会用{{echo命令替换两个大块echo.命令3}}

  6. echo在Bourne shell中只是echo。您不需要Bourne shell中的点,因为Bourne shell中的ECHO ON/OFF没有重载以打开和关闭命令回显,就像cmd.exe中的set -x一样。 (Bourne shell确实具有类似的功能,通过cmd.exe启用。)

  7. 可以在Bourne shell中获得彩色输出,但没有像read中那样的简单内置命令。如果您想要漂亮的彩色菜单,可以通过调用heredoc来替换此脚本中的大部分代码。

  8. 您使用set在shell脚本中获取输入; goto做其他事情。

  9. Bourne shell中没有q。我们不需要它,因为Bourne shell具有不错的控制结构。我认为dialog(1)表达了内部选择代码的意图,而a case statement表达了外部“继续这样做,直到他们点击PAUSE”方案。

  10. 我不知道代码流是如何进入你的“按任意键继续”位的,所以我删除了它。如果我错了,read -n 1 -s的粗略等价物为.exe

  11. 我已更改对外部程序的调用,删除.\并将./更改为VisualBoyAdvance.exe以匹配Linux上的操作方式。你仍然需要提出desmume.exe#!/bin/sh clear while true do echo "============= RawX GBA's =============" echo "-------------------------------------" echo "1. Pokemon Crystal" echo "2. Pokemon Green" echo "3. Pokemon Gold" echo "4. Pokemon Pikachu" echo "5. Pokemon Ruby" echo "6. Pokemon Chaos Black" echo "7. Pokemon Silver" echo "8. Pokemon White (NDS)" echo "9." echo "10." echo "11." echo "12. Pokemon Black (NDS)" echo "==========PRESS 'Q' TO QUIT==========" echo echo -n "Please select a number: " read input case $input in 1) ./VisualBoyAdvance "Pokemon Crystal.zip" ;; 2) ./VisualBoyAdvance "Pokemon Green.zip" ;; # etc. q) clear exit *) clear echo "============INVALID INPUT============" echo "-------------------------------------" echo "Please select a number from the Main" echo "Menu [1-12] or select 'Q' to quit." echo "-------------------------------------" echo "======PRESS ANY KEY TO CONTINUE======" esac done 的Linux等价物。

  12. 结果如下所示:

    {{1}}
相关问题