linux - Linux 脚本中的多选菜单

标签 linux bash scripting

我制作了一个脚本,用于获取来自 5 个服务器的文件列表。 脚本的输出是这样的:

--------------------------------------------------------
   Server1|
--------------------------------------------------------
Jun   | 25    | 14:40 | ./DEPE_ES36250145.22.DEL.Z    
Jun   | 26    | 08:37 | ./DEPE_ES35470064.22.DEL.Z    
Jun   | 26    | 09:25 | ./FRESCHI_ORDERS_201906260906.DEL.Z
Jun   | 26    | 13:05 | ./0003625_ORDERS_20190626_130521.DEL.Z

我的愿望是启动我编写的两个脚本之一。

在得到文件列表后我想选择文件名(也许用鼠标以便我可以粘贴它),希望被提示复制/数字化文件名, 然后提示(带有选项)选择要从中恢复文件的服务器。

基于此,我写了这个菜单脚本。

# Copia File Ordini in Locale
# Bash Menu Script
PS1='Cosa vuoi recuperare? '
options=("Ordini" "Quadrature" "Annulla")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            $ordini='./getFileOrd.sh'
            eval $ordini
            ;;
        "Option 2")
            $quad='./getFileOrdQ.sh'
            eval $quad
            ;;
        "Annulla")
            break
            ;;
    esac
done

read -p "Quale file vuoi recuperare? (Copia e incolla il nome del file compresa l'estensione) " file

PS2="Da quale server vuoi copiare" $file "? "
options=("Server1" "Server2" "Server3" "Server4" "Server5" "Annulla")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            sftp -q User1@Server1:/work/app/User1/riordino_sb/historical/output/"$file"
            ;;
        "Option 2")
            sftp -q User1@Server2:/work/app/User1/riordino_sb/historical/output/"$file"
            ;;
        "Option 3")
            sftp -q User1@Server3:/work/app/User1/riordino_sb/historical/output/"$file"
            ;;
        "Option 4")
            sftp -q User1@Server4:/work/app/User1/riordino_sb/historical/output/"$file"
            ;;
        "Option 5")
            sftp -q User1@Server5:/work/app/User1/riordino_sb/historical/output/"$file"
            ;;
        "Annulla")
            break
            ;;
        *) echo "Scegli una delle opzioni";;
    esac
done

在脚本的末尾,选定的文件被复制到用户的主目录中。菜单工作正常。我的问题是 ./getFileOrd.sh 没有启动,也可能是脚本的第二部分。

最佳答案

这是为了让你上路:

#!/bin/bash

# Copia File Ordini in Locale
# Bash Menu Script
PS3='Cosa vuoi recuperare? '
options=("Ordini" "Quadrature" "Annulla")
declare scr

select opt in "${options[@]}"
do
    case $opt in
        "Ordini")
            scr='./getFileOrd.sh'
            break
            ;;
        "Quadrature")
            scr='./getFileOrdQ.sh'
            break
            ;;
        "Annulla")
            break
            ;;
    esac
done

echo "script = $scr"
[ ! -z $scr ] && eval "$scr"

# where is $file set???  <--- ???

PS3="Da quale server vuoi copiare ${file}?"
options=("Server1" "Server2" "Server3" "Server4" "Server5" "Annulla")
select opt in "${options[@]}"
do
    case $opt in
        "Server1")
            sftp -q User1@Server1:/work/app/User1/riordino_sb/historical/output/"$file"
            break
            ;;
        "Server2")
            sftp -q User1@Server2:/work/app/User1/riordino_sb/historical/output/"$file"
            break
            ;;
        "Server3")
            sftp -q User1@Server3:/work/app/User1/riordino_sb/historical/output/"$file"
            break
            ;;
        "Server4")
            sftp -q User1@Server4:/work/app/User1/riordino_sb/historical/output/"$file"
            break
            ;;
        "Server5")
            sftp -q User1@Server5:/work/app/User1/riordino_sb/historical/output/"$file"
            break
            ;;
        "Annulla")
            break
            ;;
        *) echo "Scegli una delle opzioni";;
    esac
done

关于linux - Linux 脚本中的多选菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56772888/

相关文章:

SSIS 数据流脚本任务错误处理

java - 如何从 java 执行 shell 脚本,它会重启 tomcat 并继续运行

bash - 是否可以使用多线程解压缩压缩文件?

bash - 花括号中的变量扩展

linux - 在 unix 或 shell 中将新行打印为字符串文字

shell - shell脚本中的基本名称命令

javascript - 关于 Linux 上 Javascript 中的文件处理

windows - 执行 .sh 文件的 Java 代码

linux - 我想在没有 PDO 的情况下使用 laravel

bash - 特定时间的ffmpeg音频水印