我有一个用于处理Android文件的脚本。我从其他地方借了很多代码并把它放在一起,现在差不多完成了。
该脚本在(至少)两件事中有错误:
这是脚本:
#!/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
理想情况下,我希望能够选择多个文件来处理,但我想这将是对脚本的完整重写。 首先,我想清理一下这个:)
答案 0 :(得分: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