.BAT到.SH转换?

Cod*_*kel -1 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`
Run Code Online (Sandbox Code Playgroud)

War*_*ung 12

转换为Bourne shell非常简单:

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

  2. 在相当于cmd.exe命令CLSclear在Linux上.

  3. Linux区分大小写,因此您ECHO的所有内容都必须小写.如果我将你的IF陈述保留在翻译版本中,那么它们也必须是小写的.

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

    为了避免这种问题,我引用了所有echo字符串.我本可以有选择地完成它,只引用问题字符串,但选择双引号以保持一致性.我不希望你误解echoBourne shell中需要双引号的错误想法.

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

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

  6. 可以在Bourne shell中获得彩色输出,但是没有简单的内置命令cmd.exe.如果你想要漂亮的彩色菜单,你可以通过调用来替换这个脚本中的大部分代码dialog(1).

  7. read用来获取shell脚本中的输入; set做其他事情.

  8. gotoBourne shell中没有.我们不需要它,因为Bourne shell具有不错的控制结构.我认为一个case声明表达了你的内部选择代码的意图,并且一个无限while循环表达外部"继续这样做,直到它们命中q"方案.

  9. 我没有看到代码流如何到达你的"按任意键继续"位,所以我删除了它.如果我错了,大致相当于PAUSEread -n 1 -s.

  10. 我已经改变了对外部程序,丢弃的呼叫.exe和更改.\./的东西在Linux上做的方式相匹配.你还需要提出Linux等价的VisualBoyAdvance.exedesmume.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
Run Code Online (Sandbox Code Playgroud)