このスクリプトにはどのような問題がありますか?

このスクリプトにはどのような問題がありますか?

次のエラーが発生します。

1
/home/nacion/mcparley/VentaParley.sh: line 163: unexpected EOF while looking for matching `"'
/home/nacion/mcparley/VentaParley.sh: line 166: syntax error: unexpected end of file

スクリプトは次のとおりです。

#!/bin/sh
#
# screen -S bun -X stuff ""`echo -ne '\015'`
# 
# CONSIDERACIONES
# CUANDO EL PAIS TIENE 2 PALABRAS, SE DEBEN UNIR ESAS PALABRAS
# SINO LO TOMA COMO UN REGISTRO EXTRA
# 

# sudo bash /home/nacion/mcparley/VentaParley.sh [skw,sur2,sky2] [din/tok]
# sudo bash /home/nacion/mcparley/VentaParley.sh skw din

archivoComp="/home/nacion/$1/plugins/BossShop/shops/$2ApoComp.yml"

case "$2" in
  din)
    TipoMoneda="Money"
  ;;  
  tok)
    TipoMoneda="Points"
  ;;  
  *)
  echo "Error: Usar un numero"
esac


rm -rf $archivoComp

#Consultamos las competencias activas
compActivas=($(mysql -D parley --user=root -- ="easypassword" -s -N -e "Select ID, NombreCompetencia From Competencias Where Activa = \"1\";"))

echo "1"

if [ ${#compActivas[@]} -gt 0 ] 
then
  echo "3"
  #Hay competencias activas
  #Creamos el archivo de competencias y cargamos la cabecera
  echo > "$archivoComp"

  echo "ShopName: $2ApoComp" >> "$archivoComp"
  echo "DisplayName: '&e&lSelecciona un torneo'" >> "$archivoComp"
  echo "signs:" >> "$archivoComp"
  echo "  text: '[newshop]'" >> "$archivoComp"
  echo "  NeedPermissionToCreateSign: true" >> "$archivoComp"
  echo "shop:" >> "$archivoComp"
  echo "  atras:" >> "$archivoComp"
  echo "    MenuItem:" >> "$archivoComp"
  echo "    - name:&e&lVolver al menu anterior" >> "$archivoComp"
  echo "    - amount:1" >> "$archivoComp"
  echo "    - type:NETHER_STAR" >> "$archivoComp"
  echo "    RewardType: Shop" >> "$archivoComp"
  echo "    Reward: lobDin" >> "$archivoComp"
  echo "    PriceType: Free" >> "$archivoComp"
  echo "    Price: 10.0" >> "$archivoComp"
  echo "    Message: ''" >> "$archivoComp"
  echo "    ExtraPermission: ''" >> "$archivoComp"
  echo "    InventoryLocation: 27" >> "$archivoComp"

  #${compActivas[]}

  N=0
  cPos=1
  for i in "${compActivas[@]}" 
  do
    #El vector compActivas tendra ocupadas al menos 2 tuplas, en caso de que al menos exista 1 competencia activa    
    #Agregamos la competencia al archivo de archivoComp
    echo "  $2Comp${compActivas[$(($N))]}:" >> "$archivoComp"
    echo "    MenuItem:" >> "$archivoComp"
    echo "    - lore:&7Ver los partidos#&7Programados para hoy#En el torneo>#&b${compActivas[$(($N+1))]}" >> "$archivoComp"
    echo "    - name:&e&l${compActivas[$(($N+1))]}" >> "$archivoComp"
    echo "    - amount:1" >> "$archivoComp"
    echo "    - type:DIAMOND" >> "$archivoComp"
    echo "    RewardType: Shop" >> "$archivoComp"
    echo "    Reward: $2Comp${compActivas[$(($N))]}" >> "$archivoComp"
    echo "    PriceType: Free" >> "$archivoComp"
    echo "    Price: 10.0" >> "$archivoComp"
    echo "    Message: ''" >> "$archivoComp"
    echo "    ExtraPermission: ''" >> "$archivoComp"
    echo "    InventoryLocation: $cPos" >> "$archivoComp"

    #Asignamos el archivo nuevo al que se agregaran los partidos disponibles
    archivoApoComp="/home/nacion/$1/plugins/BossShop/shops/$2Comp${compActivas[$(($N))]}.yml"

    #Lo borramos y reconstruimos para asegurarnos de una copia limpia
    rm -rf $archivoApoComp
    echo > "$archivoApoComp"

    #Ya creamos el item que aparecera en el menu de competencias activas

    #Buscamos los partidos programados para la fecha, pertenecientes a esta competencia    

    # IDS de partidos del dia que aun no han cerrado
    # Se cierran 1 hora antes que inicie el partido, en el peor de los casos, por una mala sincronizacion, se cerraran maximo a 30 min de empezar
    IDSPartidos=($(mysql -D parley --user=root -- ="easypassword" -s -N -e "Select ID From Partidos Where Fecha = CURDATE() and DATE_ADD(NOW(), INTERVAL 2 HOUR) < CONCAT(Fecha,' ',Hora) and Competencia = \"${compActivas[$(($N))]\";"))

    pPos=0
    if [ ${#IDSPartidos[@]} -eq 0 ]; 
    then
      echo "No hay partidos disponibles para el dia de hoy para la competencia ${compActivas[$(($N))]"
    else      
      echo "Se encontraron partidos disponibles para hoy, iniciando procedimiento de venta"

      for i in "${IDSPartidos[@]}" 
      do
        let "pPos= $pPos + 1"

        # Consultamos los datos de cada apuesta
        resultado=($(mysql -D parley --user=root -- ="easypassword" -s -N -e "Select * From Partidos Where ID = \"$i\";"))

        Logro="${resultado[4]}"
        if [ $Logro -gt 0 ] #Es el positivo o "batacazo" paga mas
        then
          Favorito="&cNO"
          # Usamos bc que es la calculadora, y se pueden usar decimales
          # Cambio de 100 a 200 el divisor de este, ya que la ganacia seria mucha
          Ganancia=$(bc <<< "scale = 2; ((($Logro/100)+1)*100)-100")
          # quitamos los decimales
          Ganancia=${Ganancia/.*/}
        else  # Es el negativo o favorito Paga menos
          Favorito="&aSI"   
          Logro=$(($Logro*-1))

          # Ganancia=$((((100/$Logro)+1)*100))
          Ganancia=$(bc <<< "scale = 2; (((100/$Logro)+1)*100)-100")
          # echo "$Ganancia"    
          Ganancia=${Ganancia/.*/} 
        fi

        #Cargamos el archivo de los partidos para esta competencia

        echo "  Apuesta$i:" >> "$archivoApoComp"
        echo "    MenuItem:" >> "$archivoApoComp"
        echo "    - lore:&7Datos del Partido#&7Fecha>&b ${resultado[1]}#&7Hora>&b ${resultado[2]} (-3 GMT Hora Argentina)#&7ID>&b ${resultado[0]}#&7Logro>&b ${resultado[4]}#&7Torneo> &b${resultado[5]}#&7*LNC-Apuestas*#&dGanancia>#&7Por cada 100$ Ganas> &b$Ganancia$#&eClick Aqui para comprar un boleto de apuesta#&eCompra todos los que quieras" >> "$archivoApoComp"
        echo "    - name:&b&l100 &7&la &c&l${resultado[3]}" >> "$archivoApoComp"
        echo "    - amount:1" >> "$archivoApoComp"
        echo "    - type:PAPER" >> "$archivoApoComp"
        echo "    RewardType: Item" >> "$archivoApoComp"
        echo "    Reward:" >> "$archivoApoComp"
        echo "    - lore:&7Fecha Juego> &b${resultado[1]}#&7Hora Juego> &b${resultado[2]} &7(-3 GMT) Hora Argentina#&7Moneda> &b$2#&7IDPartido> &b${resultado[0]}#&7Competencia> &b${resultado[5]}" >> "$archivoApoComp"
        echo "    - name:&c&lApuesta de 100 al equipo ${resultado[3]}" >> "$archivoApoComp"
        echo "    - amount:1" >> "$archivoApoComp"
        echo "    - type:PAPER" >> "$archivoApoComp"
        echo "    PriceType: $TipoMoneda" >> "$archivoApoComp"
        echo "    Price: 100.0" >> "$archivoApoComp"
        echo "    Message: '&eApostaste 100 por> &c${resultado[3]}&e para el dia> &b${resultado[1]}&e a las> &b ${resultado[2]} (-3 GMT Hora Argentina) &7en el torneo> &b${resultado[5]}'" >> "$archivoApoComp"
        echo "    ExtraPermission: ''" >> "$archivoApoComp"
        echo "    InventoryLocation: $pPos" >> "$archivoApoComp"

      done  
    fi

    let "N= $N + 1"  
  done
else
  #No hay competencias activas
  echo "No hay competencias activas"
fi

echo "2"

#Recargamos el boss   
screen -S $1 -X stuff "bs reload"`echo -ne '\015'`
exit 0

答え1

IDSPartidos=($(mysql -D parley --user=root -- ="easypassword" -s -N -e "Select ID From Partidos Where Fecha = CURDATE() and DATE_ADD(NOW(), INTERVAL 2 HOUR) < CONCAT(Fecha,' ',Hora) and Competencia = \"${compActivas[$(($N))]}\";")

行の末尾に}がありません。返す6番目の文字です。

関連情報