LoginSignup
1
0

More than 5 years have passed since last update.

key入力に応じて配列に格納したshellコマンドを実行するスクリプト(2018/06/11追記)

Last updated at Posted at 2018-05-01

目的

毎週手動で動作確認しているテストケースの中にadbコマンドを叩いて確認するものがある。作業手順としては、

  1. Androidデバイス(動作確認対象となるアプリインストール済み)をMacにUSB接続する
  2. テスト用コマンド(adb shell ~)をテスト仕様書からコピーする
  3. Terminalにテスト用コマンドをペーストする
  4. Androidデバイス側の挙動を目視で確認する

というものだが、テスト用コマンドは増減することはあっても変更になることはそうそうないので、

  1. AndroidデバイスをMacにUSB接続する
  2. Terminalでshellを実行しコマンドIDを入力する
  3. Androidデバイス側の挙動を目視で確認する

くらいシンプルに作業できるようにしたい。実現することで、

  • 煩雑なコピペが不要になる
  • コピペミスが生じなくなる

というメリットがある。

要件

  • コマンドIDはテスト仕様書に準ずる(0スタートではない)
  • このスクリプトを書くために工数を使いたくないのでやっつけでいい
  • 今のところ自分しか使わない
  • adbコマンド実行に必要なPATHはあらかじめ通しておく

実装・実行

実装

#!/bin/bash

# 配列宣言
arr_command=()

# keyを指定してadbコマンドを配列に格納
arr_command["1"]="adb shell am broadcast -a jp.co.example.XXX"

# コマンドがいくつ格納されているか表示
echo "there are ${#arr_command[@]} commands"

# なぜ対話型にしたのか思い出せない
while :
do
  echo "input command No."
  read key
  echo "run command No.${key}"
  echo `${arr_command[${key}]}`
  break
done

文字列として配列に格納したshellコマンドはechoするときにあの……フランス語の記号のアクサングラーヴみたいなやつ……で括ると実行できる。

実行

$ sh test_adb.sh
there are 12 commands
input command No.

keyと入力するとarr_command["key"]のコマンドが実行されレスポンスが返る。

1
run command No.1
 Broadcast completed: result=XXXX }

配列にない値を入力した場合はそのままスクリプトが終了する。

拡張

配列もっときれいに指定できないのか問題

shellスクリプトをちゃんと書いたことがないので存じ上げないんだけどJSONみたいにkey:valueで一括指定できないんだろうか?

ℹ️ bash 配列まとめ - Qiita

実行コマンドを外出しにできないのか問題

上でJSONって言ったけど本当はnodeでfs使って外出しにしたかった。作業時間が見合わなかったのでしなかった。いつかします。

対話型にする必要ないよね問題

さっき実際に使ってみて思ったんだけどこれ

$ sh test_adb.sh id

で実行できてほしい。実行ファイルパス以降にパラメータがあった場合コマンドIDとみなしてそのまま動くようにしたい。

その他

  • デバイスのステータス(Wi-fi/モバイルネットワーク/Bluetooth接続の有無とかGPSの有効・無効)を取って吐くようにするとちょっと便利かもしれない
  • ステータスチェックもしてくれるともっと便利かもしれない
  • 期待値もTerminal上で表示されると楽かもしれない

2018/06/11追記

対話型にした

$ sh test_adb.sh idで実行できてほしい

って書いたけどやっぱり対話型にしたほうが楽じゃない?と思って対話型にした。動作確認自体はAndroidデバイス上でするので。

#!/bin/bash

arr_command=()

arr_command["1"]="adb shell am broadcast -a jp.co.example.XXX"

echo "there are ${#arr_command[@]} commands"

while :
do
  echo "input command No."
  read key
  # 数字のみの文字列の場合はコマンドを実行、それ以外は終了
  if [[ ${key} =~ [0-9]+ ]]; then
    echo "run command No.${key}"
    echo `${arr_command[${key}]}`
  else
    echo "exit."
    break
  fi
done

こんな↓感じになりました。

$ sh test_adb.sh
input command No.
1
run command No.1
 Broadcast completed: result=XXXX }
input command No.
a
exit.
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0