2015-04-06 152 views
1

我被困在一個部分,我不明白爲什麼,讓我貼我的代碼:直到循環if語句

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

笑你們完蛋了,傻,笑IM感謝:,雙引號不是在'需要d – Lars 2015-04-06 12:23:56

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))。單括號,你確實需要引用變量(除非你想要副作用) – 2015-04-06 13:32:46

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 
}