-2

Androidファイルを操作するためのスクリプトがあります。他の場所からたくさんのコードを借りてまとめましたが、ほぼ完了しました。

スクリプトには、(少なくとも)2つのエラーがあります。

  1. ユーザーが利用できないオプションを選択したときに「無効な選択」というメッセージを表示してから、選択画面に戻るようにします。
  2. 選択したファイルに対して操作を実行するかどうかに関係なく、メインメニュー(「ビルド」と呼ばれる「マスター」スクリプト)に戻ってこのスクリプトに戻ると、ファイルリストはどういうわけか最後からファイルの番号付けを続けます時間..つまり、最初の実行の最後のファイルは#43です。スクリプトを再度実行すると、最初のファイルは#44で始まります。マスター(ビルド)スクリプトを完全に終了して、最初からやり直す必要があります。

スクリプトは次のとおりです。

#!/bin/bash

HOME=/home/dan/buildtool

d=$HOME/apk_in/decompiled
clear

a=`ls -d $d/* | grep .apk`
if [[ "$?" == "0" ]] ; then
    echo "Available apks for Recompiling: "
    echo
    cd $d
    for apkName in `ls | grep .apk`
    do
        i=$(($i+1))
        apkArray[$i]=$apkName
        echo "  $i. $apkName" >> temp.list
    done
    cat temp.list
    rm -f temp.list
    echo
    echo -n "Choose Apk number (choose x to return to menu): "
    read ans
    echo

    if [ "$ans" == "" ]; then
        echo "Invalid choice"
        echo
        exit 0
    fi  
    if [ "$ans" == "x" ]; then
        clear           
        . $HOME/build
    fi
    if [ "`echo $ans | sed 's/[0-9]*//'`" == "" ] || [ "ans"=="1" ]; then
        apkDecode=${apkArray[$ans]}
        if [ "$apkDecode" == "" ]; then
            exit 0
        fi
    else
        exit 0
    fi  
    apktool b -f $apkDecode 

else
    echo
    clear
    echo "No valid files"
fi

理想的には、使用するファイルを複数選択できるようにしたいのですが、それはスクリプトの完全な書き直しになると思います。まず、これをクリーンアップしたいと思います。 )。

4

1 に答える 1

1

一般に、lsの出力を何かに使用することは望ましくありません。特に、単純なglobで置き換えることができる場合はそうではありません。Bashにはすでに番号によるアイテムの選択メニューがあります:selectステートメント。

["ans" =="1"]にも落とし穴がありますが、これは常に当てはまります。あなたはおそらく[[$ans== 1]]を意味していました(ShellCheckはこの種の問題に役立つことがあります)。

これに基づいて、書き直しの開始点は次のとおりです。

#!/bin/bash
HOME=/home/dan/buildtool
d=$HOME/apk_in/decompiled
shopt -s failglob
echo "Enter a number, or x to exit"
select file in *.apk
do
    [[ $REPLY == x ]] && break
    [[ -z $file ]] && echo "Invalid choice" && continue
    apktool b -f "$file"
done
于 2012-12-15T00:24:07.430 に答える