ラベル ShellScript の投稿を表示しています。 すべての投稿を表示
ラベル ShellScript の投稿を表示しています。 すべての投稿を表示
2014/08/16

[ShellScript]エラーが起きたり、未定義の変数が使用されたら停止する

adb-screencap で Android 端末の画面をキャプチャしてPCに持ってくるコマンドで作った adb-screencap コマンドが
複数端末接続されていて -s で端末指定されていない場合に
error: more than one device and emulator エラーが連発して
残念な感じだったので修正しました。
1行目の#!/bin/sh#!/bin/sh -euに変更することで
エラーが起きたり、未定義の変数が使用されたら処理を停止するようになります。
参考: Bash - シェルスクリプトを書くときはset -euしておく - Qiita

修正したものは wada811/ADB-Tools に置きました。
README は わかりやすいREADME.mdを書く | SOTA を参考に充実させてみました。
2014/07/06

[ShellScript]adb-screencap で Android 端末の画面をキャプチャしてPCに持ってくるコマンド

adbでスクリーンショットを撮るやつ - teshi04 / adb-screencap.sh
↑を実行するのに ./adb-screencap.sh とかするよりパスの通っているところに置いて
コマンドっぽく adb-screencap ってしたかったので書き換えてみた。
ついでに複数端末接続時に端末を指定してキャプチャできるようにしてみた。

man の書き方とか contribution の書き方とかライセンスとかどうすればいいのかわからないので
誰か良い感じにして下さい。
全然エラー制御していなくて、端末が認識されていないのに実行したり、
複数端末が認識されているのに端末を指定せずに実行した時はコマンドの分だけエラーが出ます。

入門UNIXシェルプログラミングを途中まで読んでいたので
制御文の書き方レベルしか知らなくて
初めてのシェルプログラミングだったので空文字チェックで地味に詰まりました。

if [ -z $SERIAL ] だと $SERIAL が null の場合
if [ -z ] と評価されて unary operator expected というエラーが出ます。
if [ -z "$SERIAL" ] のようにクォートで囲って
if [ -z "" ] と評価されるようにすれば
-z (Zero length) の引数にちゃんと空文字が渡されてエラーになりません。

あ、あとコメントの TODO にある通り、オプション引数の有無でコマンドを分けていて微妙なので
誰か良い方法を知っていたら教えて下さい。よろしくお願いします。
GitHub→ wada811/ADB-Tools

参考
シェルスクリプトを公開するとき, コマンド前にバックスラッシュをつけるべき - Life is very short
Bash - 今更ながら抑えておきたいシェルスクリプト用チートシート - Qiita
シェルスクリプトの条件評価ではまりやすいところ - ritchiekotzen's blog
シェルスクリプトで空文字列かどうか調べる。 - masa.edw the ハバネロブリーダー

タグ(RSS)