代码之家  ›  专栏  ›  技术社区  ›  Andrew Courtenay

交互式shell脚本-递归太深

  •  0
  • Andrew Courtenay  · 技术社区  · 7 年前

    之前有人建议我这样做是因为我没有从循环中构建菜单系统,但现在我已经使用“选择”完成了这项工作。这是我的菜单:

    clear
    
    echo "\nDatabase:${HBDB} ClaimId:${CLAIM}  TxId:${TRANS}  SubsidyId:${SUBS}"
    echo "Select your option"
    PS3="Option?"
    
    select opt in \
    "Input new subsidy row" \
    "Change transaction and subsidy id" \
    "Change subsidy id only" \
    "Show subsidy row details" \
    "Exit"
    
    do
        case $opt in
                "Input new subsidy row")
    
                followUp=$SUPPATH/menuSelect.sh
    
                echo 'Dropping temp table...mcc_ac_tmp_hb9880_${CLAIM}_${TRANS}_${SUBS} ' >> $OUTFILE1
    
                sql $HBDB <<_END_ | sed -n '/DROP/,$p' >> $OUTFILE1
    
                set autocommit on;
                \p\g
                set lockmode session where readlock = nolock;
                \p\g
    
                DROP TABLE mcc_ac_tmp_hb9880_${CLAIM}_${TRANS}_${SUBS}; 
    
                \p\g
    
    _END_
                . $paramSet
                break
                ;;
    
                "Change transaction and subsidy id")
                followUp=$SUPPATH/menuSelect.sh
    
                . $transChange
    
                break
                ;;
    
    
                "Change subsidy id only")
    
                followUp=$SUPPATH/menuSelect.sh
    
                . $subsChange
                break
                ;;
    
    
                "Show subsidy row details")
                echo "Retrieving details..."
                followUp=$SUPPATH/menu1.sh
    
                sql $HBDB <<_END_ | grep '|'  
    
                set autocommit on;
                \p\g
                set lockmode session where readlock = nolock;
                \p\g
    
                select claim_id,rent_trans_id,rent_subsidy_id,from_date,pay_amt
                from hbrentsubsidy
                where claim_id=${CLAIM}
                and rent_trans_id=${TRANS}
                \p\g
    _END_
                read
                break
                ;;
    
    
                "Exit")
                exit 
                ;;
    
    
                *) 
                echo "ERROR: Invalid selection"
                ;;
                esac
            done
    
    
    . $followUp
    

    每次选择一个选项时,都会调用一个函数,循环会中断,脚本会继续执行后续操作,例如选择另一个菜单来运行。

    如果你想了解更多整个剧本,请告诉我

    1 回复  |  直到 7 年前
        1
  •  0
  •   Andrew Courtenay    7 年前

    问题解决了!看起来我可以获取文件的次数是有限制的,我认为这是一个文件操作员的限制。我在开始时对每个文件进行一次寻源,将每个文件的内容放入一个函数中,然后调用函数名,而不是重复寻源文件。