Linux

無法滿足 shell 腳本中的 if 條件

  • July 19, 2021

我試圖在下面執行以下shell腳本

function Check_Status () {

      if [[ "$(adb shell getprop sys.boot_completed)" =~ "adb: no devices/emulators found" ]]; 
      then
         echo "here"

      else 
           echo "im here"
      fi;
};

Check_Status

我得到以下輸出,我希望看到“這裡”而不是“我在這裡”

截屏

不確定可能缺少什麼

是的,您圖片上的文字與腳本中的文字相同。但僅憑一張照片很難確定。

但是請注意,當您執行腳本時,文本是如何到達您的終端的?命令替換應該擷取輸出,無論被它擷取什麼,都不會被列印出來。adb可能將該消息列印到標準錯誤,而不是標準輸出,因此不會被擷取。

您可以通過以下方式驗證這一點:

echo "running the command substitution... (errors would print after this line)"
output=$(adb shell getprop sys.boot_completed)
echo "captured output (stdout): '$output'"

然後看看哪裡出來的。

如果這確實是問題所在,那麼您需要在命令替換中將 stderr 重定向到 stdout:

if [[ "$(adb shell getprop sys.boot_completed 2>&1)" =~ "adb: no devices/emulators found" ]]; then
   ...

引用自:https://unix.stackexchange.com/questions/659020