如何为启动参数使用数组值?

时间:2017-05-01 05:05:06

标签: arrays bash

我正在尝试通过PlayOnLinux为Windows启动Steam Native编写脚本。只是视频游戏只有Microsoft Windows Binary Executable。

阅读" ID"从列表中,是它不在列表中的ID然后为GNU / Linux启动Steam本机。

这个脚本的想法是用于Web浏览器,例如:Mozilla Firefox使用" steam://"协议

我把我的脚本放在这里(我来自委内瑞拉,脚本是用西班牙语制作的,如果可能的话,请不要翻译变量):

#!/usr/bin/env bash

echo '
Autor ----------------> Inukaze ( Venezuela )
Licensia -------------> GPL 2

******* Inicio : Acerca de este Script ********

 Este Mini-Script es para poder iniciar Steam
 Para Windows, desde un Navegador Web Nativo
 para Liñux.

 La idea y la funcion es para facilitar la 
 Instalación de varios Videojuegos que no
 poseen una version nativa para Liñux

 Iniciando el Steam que tengas en el prefijo
 "Steam" dentro de "PlayOnLinux" e iniciando
 y encolando la descarga de (los) titulo(s)
 que hayas hecho clic en el navegador

******** Fin : Acerca de este Script **********
'

# Obtener el Nombre del Nucleo
Nucleo=$(uname -s)
case "$Nucleo" in
    Linux)      Nucleo="linux"                      ;;
    FreeBSD)    Nucleo="kfreebsd"                   ;;
    GNU/kFreeBSD)   Nucleo="kfreebsd"                   ;;
    * ) echo "Tu Sistema Operativo -> NO ESTA SOPORTADO"            ;;
esac

# Obtener la ARQUITECTURA
ARQUITECTURA=$(uname -m)
case "$ARQUITECTURA" in
    x86)    ARQUITECTURA="x86"                      ;;
    i?86)   ARQUITECTURA="x86"                      ;;
    amd64)  ARQUITECTURA="amd64"                        ;;
    x86_64) ARQUITECTURA="amd64"                        ;;
    * ) echo    "Tú Arquitectura : '$ARQUITECTURA' : -> IT NOT SUPPORTED."  ;;
esac

# Comprobrar que (No/)Existen los archivos y rutas, antes de proceder
if test -d "$HOME/.PlayOnLinux/wineprefix/Steam"
    then
    echo
            if test -f "$HOME/.PlayOnLinux/wineprefix/Steam/drive_c/Program Files/Steam/steam.exe"
            then
                echo "Encontrado ejecutable de Steam en el prefijo predeterminado"
            fi

            if test -d "$HOME/.PlayOnLinux/wineprefix/Steam/drive_c/Program Files/Steam/steamapps/common"
            then
                echo "Encontrada Carpeta Comun de Steam"
            fi
    else
        echo "Steam no esta instalado en el Prefijo Predeterminado"
        xmessage -timeout 3 "Steam no esta instalado en el Prefijo Predeterminado"
        exit 1
fi

if test -f "$HOME/.PlayOnLinux/wineprefix/Steam/playonlinux.cfg"
    then
    # Obtener la version de WINE y su arquitectura del Prefijo Steam dentro de PlayOnLinux ;
    VERSION_WINE=$(cat "$HOME/.PlayOnLinux/wineprefix/Steam/playonlinux.cfg" | grep VERSION= | sed 's/VERSION=//g')
    ARQUITECTURA_WINE=$(cat "$HOME/.PlayOnLinux/wineprefix/Steam/playonlinux.cfg" | grep ARCH= | sed 's/ARCH=//g')
    else
        echo "Steam no esta instalado en el Prefijo Predeterminado"
        xmessage -timeout 3 "Steam no esta instalado en el Prefijo Predeterminado"
        exit 1
fi

# Configurar Variables de Entornos, Rutas e Iniciar Steam para Windows :
PATH="$HOME/.PlayOnLinux/wine/$ARQUITECTURA-$ARQUITECTURA_WINE/$VERSION_WINE/bin:$PATH"
export WINESERVER="$HOME/.PlayOnLinux/wine/$Nucleo-$ARQUITECTURA_WINE/$VERSION_WINE/bin/wineserver"
export WINELOADER="$HOME/.PlayOnLinux/wine/$Nucleo-$ARQUITECTURA_WINE/$VERSION_WINE/bin/wine"
export WINEDLLPATH="$HOME/.PlayOnLinux/wine/$Nucleo-$ARQUITECTURA_WINE/$VERSION_WINE/lib"
export WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/Steam"
export WINEDEBUG=-all
cd "$HOME/.PlayOnLinux//wineprefix/Steam/drive_c/./Program Files/Steam"

# Lista de Videojuegos segun su IDentificador de APPlicacion en STEAM :
STEAMID=( 
"204360"    # Castle Crashers(TM)
"205230"    # Hell Yeah! Wrath of the Dead Rabbit
"205950"    # Jet Set Radio (Puede que necesites intercambiar el nombre de ambos ejecutables)
"215100"    # Ragnarok Online
"218640"    # Lucius
"22000"     # World Of Goo                  - Ya esta Portado a Liñux
"222900"    # Dead Island: Epidemic             - La Pagina de la tienda ya no existe
"224220"    # Pressure
"235720"    # Cubetractor
"253900"    # Knights and Merchants
"254000"    # East India Company Gold           - La Pagina de la tienda ya no existe
"254040"    # Pirates Of Black Cove Gold            - La Pagina de la tienda ya no existe
"254060"    # KnightShift
"254100"    # World War II: Panzer Claws
"258200"    # Talisman: Prologue
"259320"    # Heli Heroes
"267920"    # Gun Metal
"267940"    # Glacier 3: The Meltdown
"267960"    # Hyper Fighters
"267980"    # Hostile Waters: Antaeus Rising
"271640"    # Humanity Asset
"274900"    # Murder Miners
"278490"    # Aveyond 3-2: Gates of Night
"279640"    # The Troma Project
"283330"    # Desert Thunder
"283350"    # Eurofighter Typhoon
"283410"    # CT Special Forces: Fire for Effect
"284950"    # Pixel Puzzles: Japan
"285840"    # Enemy Mind
"286440"    # Rover Rescue
"292380"    # Racer 8
"292390"    # Realms Of The Hauting (DOSBox)
"292410"    # Street Racing Syndicate
"293180"    # Overcast - Walden and the Werewolf
"296910"    # 8BitBoy TM
"306350"    # Slipstream 5000
"307070"    # Memories of a Vagabond
"307350"    # Nux
"310450"    # Steam & Steel : Episode 1
"311480"    # Vertical Drop Heroes HD
"315430"    # Polarity
"319180"    # Platypus II
"321150"    # Melissa K. and the Heart of Gold Collector's Edition
"323630"    # Ubinota
"331710"    # Why So Evil
"34270"     # SEGA MegaDrive & Genesis Classics     - La Pagina de la tienda ya no existe
"343360"    # Particula
"344040"    # Voxelized
"344130"    # Cataegis : The White Wind
"347560"    # Terra Incognita ~ Chapter One: The Descendant
"350810"    # Pixel Puzzles 2: Anime
"351030"    # Pixel Puzzles Ultimate
"351470"    # Sometimes: Success Requires Sacrifice
"3590"      # Plants -VS- Zombies GOTY
"37400"     # Time Gentlemen, Please! and Ben There, Dan That! Special Edition Double Pack
"37420"     # Time Gentlemen, Please! and Ben There, Dan That! Special Edition Double Pack
"382490"    # Relic Hunters Zero
"385200"    # Absconding Zatwor
"395170"    # DISTRAINT
"395980"    # Break Into Zatwor
"410560"    # Trinium Wars
"42500"     # DogFighter
"428430"    # Endorlight
"447880"    # Beast Blaster
"4720"      # Condemned: Criminal Origins
"517320"    # GunGirl2
"57690"     # Tropico 4: Steam Special Edition
"6850"      # Hitman 2: Silent Assassin
"7510"      # X-Blades
"7520"      # Two Worls II
#"91200"    # Anomaly: Warzone Earth            - Ya esta Portado a Liñux
#"200710"   # TorchLight II                 - Ya esta Portado a Liñux
#"238910"   # Bionic Dues ( Ya portado a Liñux )
#"253920"   # Gorky 17                  - Usa su propia version de Wine
#"253940"   # Septerra Core                 - Usa su propia version de Wine
#"253980"   # Enclave                   - Usa su propia version de Wine
#"254020"   # Commander : Conquest Of the Americas Gold - La Pagina de la tienda ya no existe
#"259280"   # Earth 2150 : The Moon Project         - La Pagina de la tienda ya no existe
#"259300"   # Earth 2150 : Lost Souls           - La Pagina de la tienda ya no existe
#"259360"   # Chicken Shoot 2               - La Pagina de la tienda ya no existe
#"278460"   # SkyBorn                   - Ya esta Portado a Liñux
#"382240"   # Blood Of Old (OLD VERSION)            - La Pagina de la tienda ya no existe
#"38740"    # EDGE                      - Ya esta Portado a Liñux
#"48000"    # LIMBO (Ya esta Portado a Liñux)
)

# En caso de que el parametro posea algun numero de la lista
# Iniciar el Steam Nativo para Windows desde PlayOnLinux :

         #IDEA 1 :
         #IDEA1#STEAMWIN=$(exec wine Steam.exe -no-dwrite -no-cef-sandbox "$1" &> /dev/null)
         #IDEA1#    case $1 in
         #IDEA1#    steam://run/3590) if [ "$1" = "$@"]; then $STEAMWIN; fi ;;
         #IDEA1#    esac
         #IDEA 2 :
         #while (( ${#STEAMID[@]}+1 ))
         #do
         #
         #IDEA 3 :
         #  for i in ${!STEAMID[*]}; do
         #
         #IDEA 4 :
         # if [ "${STEAMID[*]}" = "$@" ]; then

            case $1 in
            *)
                    echo
                    echo 'Parametro de Lanzamiento -> '"$@"''
                    echo
                    exec wine Steam.exe -no-dwrite -no-cef-sandbox "$@" &> /dev/null
                    echo
                    echo
                    exit 0
                    ;;
            esac

            # En caso de usar do, finalizar con "done" :
            #done

# En caso de que el parametro no pesea ningun numero de la lista
# Iniciar el Steam Nativo para Liñux

        # Correcion para Steam para que me deje de dar errores como :
        # Could not find required OpenGL entry point :
        # 'glColorMaskIndexedEXT'
        # 'GLGetError'!
        # 'glUseProgramStages'!
        #
        export PATH="/media/Compartido/Videojuegos/Gestor/Linux/Steam/Slackware64/home/bin/":$PATH
        export GAME_DEBUGGER="hl2debug"
    hl2debug

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望检查数组id中是否包含某些STEAMID,那么您只需使用=~运算符与{{bash}进行简单比较1}}。例如,要检查[[ ... ]],您可以使用以下内容:

id=321150

如果id=321150 [[ ${STEAMID[@]} =~ $id ]] && echo "start windows: $id" || echo "use Gnu" 中存在id=321150(确实如此),那么STEAMID将会执行,否则echo "start windows: $id"会执行。如果您愿意,可以根据需要使用echo "use Gnu"而不是复合语句进行调整。但是,如果我理解你的问题,我就会检查if ... then ... else ... fi数组中id是否存在于STEAMID的Windows / linux启动目的。

示例使用/输出

steam://

如果您正在寻找其他内容,并且我没有正确理解该问题,请发表评论,我很乐意进一步提供帮助。