簡體   English   中英

Bash 腳本與 arguments

[英]Bash script with arguments

我對 bash 沒有經驗。 我正在嘗試在 mac 上編寫 bash 腳本來幫助運行 flutter 開發環境。 我正在使用 select 環境類型的標志選項,然后在最后腳本將告訴 flutter 使用什么 ip 地址。


function main(){

  check $@

  local ip = "localhost"

  if [ $android ]
    then
      if [ $device ]
        then
          echo "Running On Android Device"
          $ip = $(ipconfig getifaddr en0)
        else
          echo "Running On Android Simulator"
          $ip = "10.0.2.2"
      fi
    else
      if [ $device ]
        then
          echo "Running On IOS Device"
          $ip = $(ipconfig getifaddr en0)
        else
          echo "Running On IOS Simulator"
          $ip = "localhost"
      fi
  fi

  echo "IP: $ip" 

  flutter run --dart-define="IP=$ip"

}

function check(){
  local OPTIND opt i
  while getopts ":p:d" opt; do 
    case $opt in
      p) platform $OPTARG;;
      d) device;;
      /?) help;exit 1 ;;
      :) echo "Option -$OPTARG requires an argument.";exit 1 ;;
      *) echo "Invalid option: -$OPTARG";exit 1 ;;
    esac
  done
}

function platform(){

  if ["$1" == "android"] || ["$1" == "a"]
    then android = true
  elif ["$1" == "ios"] || ["$1" == "i"]
    then android = false
  else echo "Invalid platform, running on android by default"
  fi
}

function device(){
  device = true
}

function help(){
  echo "This script only accepts the following options:"
  echo "-p [android|a|ios|i] : select android platform"
  echo "-d : run on actual device"
}

main $@



但是這個腳本失敗了,不知道為什么:

% bash run.sh -p a -d
run.sh: line 50: [a: command not found
run.sh: line 50: [a: command not found
run.sh: line 52: [a: command not found
run.sh: line 52: [a: command not found
Invalid platform, running on android by default
zsh: segmentation fault  bash run.sh -p a -d

並沒有花太多時間,但我發現了兩個主要錯誤。 我建議使用正確的 IDE,這樣您就不必花太多時間調試語法問題。

  1. 做作業時不應該有任何空格。 請注意, =周圍沒有空格
ip=$(ipconfig getifaddr en0)
  1. 如果條件 OR 應如下所示。 注意空格
  if [ "$1" == "android" ] || [ "$1" == "a" ]

function main(){

  check $@

  local ip="localhost"

  if $android
    then
      echo "Android true"
      if $device
        then
          echo "Androind and device true"
          echo "Running On Android Device"
          ip=$(ipconfig getifaddr en0)
        else
            echo "Androind true and device false"
          echo "Running On Android Simulator"
          ip="10.0.2.2"
      fi
    else
      if $device
        then
          echo "Running On IOS Device"
          ip=$(ipconfig getifaddr en0)
        else
          echo "Running On IOS Simulator"
          ip="localhost"
      fi
  fi

  echo "IP: $ip" 

#   flutter run --dart-define="IP=$ip"

}

function check(){
  local OPTIND opt i
  while getopts ":p:d" opt; do 
    case $opt in
      p) platform $OPTARG;;
      d) device;;
      /?) help;exit 1 ;;
      :) echo "Option -$OPTARG requires an argument.";exit 1 ;;
      *) echo "Invalid option: -$OPTARG";exit 1 ;;
    esac
  done
}

function platform(){
    echo "inside platform "
  if [ "$1" == "android" ] || [ "$1" == "a" ]; then 
    echo "android"
    android=true
  elif [ "$1" == "ios" ] || [ "$1" == "i" ]; then 
    echo "ios"
    android=false
  else 
    echo "Invalid platform, running on android by default"
  fi
}

function device(){
  device=true
}

function help(){
  echo "This script only accepts the following options:"
  echo "-p [android|a|ios|i] : select android platform"
  echo "-d : run on actual device"
}

main $@

跑步

─ bash test.sh -p i -d
inside platform 
ios
Running On IOS Device
IP: 192.168.1.113

╰─ bash test.sh -p a -d
inside platform 
android
Android true
Androind and device true
Running On Android Device
IP: 192.168.1.113

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM