我制作了一个脚本,用于获取来自 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/