【问题标题】:Bash script needs cleanup [closed]Bash脚本需要清理[关闭]
【发布时间】:2012-12-13 18:29:59
【问题描述】:

我有一个处理 Android 文件的脚本。我从其他地方借了很多代码,并把它放在一起,现在差不多完成了。

脚本在(至少)两件事上有错误:

  1. 我希望它在用户选择不可用选项时显示“无效选择”消息,然后返回选择屏幕。
  2. 无论我是否对选定文件运行操作,如果我返回主菜单(一个名为“build”的“主”脚本)并返回此脚本,文件列表会以某种方式继续文件编号从上次..即第一次运行的最后一个文件是#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

理想情况下,我希望能够选择不止一个文件来处理,但我想这将是对脚本的完全重写.. 首先,我想把这个清理干净:)

【问题讨论】:

  • 那么是什么阻止了你?我们在这里提供帮助,而不是为您完成工作。
  • 嗯,是的,但我问是因为我不知道如何使它正常工作:/ 一方面,我不知道为什么当我不打印“无效选择”时按一个未使用的选项..?

标签: bash menu option


【解决方案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

【讨论】:

  • 谢谢!比以前好多了,而且更短了!现在它不会乘以编号,当我退出并从菜单重新输入脚本时.. 太棒了!
猜你喜欢
  • 1970-01-01
  • 2019-03-31
  • 2012-07-12
  • 2020-08-31
  • 2018-11-12
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2021-04-01
相关资源
最近更新 更多