erro de sintaxe: operando esperado (token de erro é “+”)

0

Estou recebendo este erro abaixo:

Path to the shell file:line 6: ++++: syntax error: operand expected (error token is "+")

e

Path to the shell file:line 13: ((: i <= : syntax error: operand expected (error token is "<= ")\

Este é o meu script:

#!/bin/bash  
SCRIPTPATH=$( cd $(dirname $0) ; pwd -P )
file="$SCRIPTPATH/android/sdcard.img"
file2="$SCRIPTPATH/android/devices.txt"

TOTALDEVICES=$(($1+$2+$3+$4+$5))
ANDROID4=0
ANDROID5=0
ANDROID5_1=0
ANDROID6=0
ANDROID7=0
echo $TOTALDEVICES
for ((i = 1; i <= $TOTALDEVICES; i++));

do
   if (($1 > 0 && $ANDROID4 < $1)) 
   then 
   echo "Device$i PACKAGE(avd4.4) 1"
   ANDROID4=$((ANDROID4 + 1))
    echo "no" |~/Android/Sdk/tools/bin/avdmanager create avd -f --package 'system-images;android-19;google_apis;armeabi-v7a' --name "avd4"  --tag 'google_apis' -p $SCRIPTPATH/android/avd4
   fi

   if (($2 > 0 && $ANDROID5 < $2 && $ANDROID4 == $1 && $i > $ANDROID4))
   then 
   echo "Device$i PACKAGE(avd5.0) 2"
   ANDROID5=$((ANDROID5 + 1))
    echo "no" |~/Android/Sdk/tools/bin/avdmanager create avd -f --package 'system-images;android-21;google_apis;armeabi-v7a' --name "avd5"  --tag 'google_apis' -p $SCRIPTPATH/android/avd5
   fi
   if (($3 > 0 && $ANDROID5_1 < $3 && $ANDROID5 == $2 && $i > $ANDROID5 + $ANDROID4))
   then 
   echo "Device$i PACKAGE(avd5.1) 3"
   ANDROID5_1=$((ANDROID5_1 + 1))
    echo "no" |~/Android/Sdk/tools/bin/avdmanager create avd -f --package 'system-images;android-22;google_apis;x86' --name "avd5.1"  --tag 'google_apis' -p $SCRIPTPATH/android/avd5.1
   fi
   if (($4 > 0 && $ANDROID6 < $4 && $ANDROID5_1 == $3 && $i > $ANDROID5_1 + $ANDROID5 + $ANDROID4))
   then 
   echo "Device$i PACKAGE(avd6) 4"
   ANDROID6=$((ANDROID6 + 1))
   echo "no" | ~/Android/Sdk/tools/bin/avdmanager create avd -f --package 'system-images;android-23;google_apis;x86' --name "avd6"  --tag 'google_apis' -p $SCRIPTPATH/android/avd6
   fi
   if (($5 > 0 && $ANDROID7 < $5 && $ANDROID6 == $4 && $i > $ANDROID6 + $ANDROID5_1 + $ANDROID5 + $ANDROID4))
   then 
   echo "Device$i PACKAGE(avd7) 5"
   ANDROID7=$((ANDROID7 + 1))
   echo "no" | ~/Android/Sdk/tools/bin/avdmanager create avd -f --package 'system-images;android-24;google_apis;x86' --name "avd7"  --tag 'google_apis' -p $SCRIPTPATH/android/avd7  
   fi
done

AVDMANAGEROUTPUT=$(~/Android/Sdk/tools/bin/avdmanager list avds | grep "Name:")
AVDMANAGEROUTPUT=${AVDMANAGEROUTPUT//$'\n'/} # Remove all newlines.
AVDMANAGEROUTPUT=${AVDMANAGEROUTPUT%$'\n'}   # Remove a trailing newline.
DEVICES=()
i=0
IFS=' ' read -r -a array <<< "$AVDMANAGEROUTPUT"
for index in "${!array[@]}"
do
    rem=$(( $index % 2 )) #check for odd number to avoid Name:
    if [ $rem -eq 1 ]
    then
        echo "${array[index]}" #Now put values into an array
        DEVICES[$i]='echo @"${array[index]}"'
        i=$((i+1))
    fi
done
# Check if the sdcard is available
if [ -f "$file" ]
then
    echo "$file found."
    ~/Android/Sdk/emulator/emulator ${DEVICES[0]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    ~/Android/Sdk/emulator/emulator ${DEVICES[1]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    ~/Android/Sdk/emulator/emulator ${DEVICES[2]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    ~/Android/Sdk/emulator/emulator ${DEVICES[3]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    ~/Android/Sdk/emulator/emulator ${DEVICES[4]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    sleep 110
else
# if there is none,here we are creating one
    echo "$file not found."
    ~/Android/Sdk/emulator/mksdcard 10G "$SCRIPTPATH/android/sdcard.img"
    sleep 5
    ~/Android/Sdk/emulator/emulator ${DEVICES[0]} -sdcard $file  >> "$SCRIPTPATH/emulators.txt" 2>&1 &  
    ~/Android/Sdk/emulator/emulator ${DEVICES[1]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    ~/Android/Sdk/emulator/emulator ${DEVICES[2]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    ~/Android/Sdk/emulator/emulator ${DEVICES[3]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    ~/Android/Sdk/emulator/emulator ${DEVICES[4]} -sdcard $file >> "$SCRIPTPATH/emulators.txt" 2>&1 & #open the emulator
    sleep 110
fi
    
por Sibabalwe Mvelo 04.05.2017 / 08:41

2 respostas

3

A linha 6 do seu script espera que os argumentos 1 a 5 existam. Se você executar seu script sem argumentos, $1+$2+$3+$4+$5 se tornará +++++ , o que explica a mensagem de erro. (Uma explicação semelhante é válida para a segunda mensagem de erro.) Talvez você deva verificar se 5 argumentos foram fornecidos e sair com uma mensagem de erro se este teste falhar, e. g .:

if [ $# != 5 ]
then
    echo "Usage: scriptname num1 num2 num3 num4 num5"
    exit 2
fi

Como alternativa, você pode fornecer um valor padrão para argumentos ausentes com Expansão do parâmetro do Bash . Na expressão a seguir, os primeiros 5 argumentos de linha de comando, ou 0 na ausência deles, são adicionados a uma soma:

$((${1-0} + ${2-0} + ${3-0} + ${4-0} + ${5-0}))

Observe que você também deve verificar se cada um dos 5 argumentos é numérico antes de tentar obter sua soma.

    
por Jeffrey Ross 04.05.2017 / 11:00
0

Obrigado pela sua resposta, você me ajudou a ver o que eu fiz de errado.

Como corrijo:

Eu então executei o arquivo sh como 'file.sh' 1 1 1 1 1 que permitia a execução dos emuladores. Os 1s determinam quantos emuladores de cada eu quero executar.

    
por Sibabalwe Mvelo 09.05.2017 / 15:51