2015-04-06 3 views
1

я застрял на части, и я не понимаю, почему, позвольте мне вставить свой код:до контура с, если заявления

local correctId=false 
    echo $ticketMessage 
    read deviceId 

    until [[ $deviceId =~ [0-9]+ && correctId = true ]]; do 

     if [ ! -e $baseDevicesPath"/$deviceId" ]; then 
     echo $deviceError 
     correctId=false 
     else 
     correctId=true 
     fi 

    if [[ ! $deviceId =~ [0-9]+ ]]; then 
     echo $ticketMessage 
    fi 

     read deviceId 
    done 

    echo "I DONT COME HERE?" 

если оба DeviceId и correctId истинны, он должен выйти из до цикла и идти дальше? но это не так, я понимаю, что я делаю неправильно здесь?

ответ

1

У вас просто простая опечатка. вам не хватает $ перед correctID в вашем состоянии:

local correctId=false 
echo $ticketMessage 
read deviceId 

until [[ $deviceId =~ [0-9]+ && $correctId = true ]]; do 

    if [ ! -e $baseDevicesPath"/$deviceId" ]; then 
    echo $deviceError 
    correctId=false 
    else 
    correctId=true 
    fi 

if [[ ! $deviceId =~ [0-9]+ ]]; then 
    echo $ticketMessage 
fi 

    read deviceId 
done 

echo "NOW YOU WILL END HERE" 
+0

лол вы вот это, им глупо, лол спасибо: D – Lars

0

Изменение correctId в $ correctId (от $ {correctId}). Я хотел бы добавить двойные кавычки:

local correctId="false" 
echo ${ticketMessage} 
read deviceId 

until [[ $deviceId =~ [0-9]+ && "${correctId}" = "true" ]]; do 

    if [ ! -e "${baseDevicesPath}/${deviceId}" ]; then 
    echo ${deviceError} 
    correctId="false" 
    else 
    correctId="true" 
    fi 

if [[ ! "${deviceId}" =~ [0-9]+ ]]; then 
    echo ${ticketMessage} 
fi 

    read deviceId 
done 

echo "Do you come here?" 
+0

строго говоря, двойные кавычки не требуются, в ' [[]] '- bash не выполняет разбиение слов там ([ref] (https://www.gnu.org/software/bash/manual/bashref.html#index-_005b_005b)). Отдельные скобки, вам нужны переменные, которые нужно указывать (если вы не хотите побочных эффектов) –

0

здесь немного более читаемым решение

function findDevice { 
echo $ticketMessage; 
read deviceId; 

while true; do 
    local errorMessage; 
    if [[ $deviceId =~ [0-9]+ ]]; then 
     if [ -e $baseDevicesPath"/$deviceId" ]; then 
      #valid input, breaking the loop 
      break;    
     fi 
     errorMessage=$deviceError; 
    else 
     errorMessage=$ticketMessage; 
    fi 
    echo $errorMessage; 
    read deviceId; 
done 
} 
Смежные вопросы