Shell-Script

如何僅在一行中 bash 腳本菜單

  • May 8, 2022

我正在腳本(#!/bin/bash)中創建一個菜單,它可以按我的需要工作:

PS3='[ menu ] choose partition tool:'
options=("fdisk" "cfdisk" "continue")
select opt in "${options[@]}"
do
   case $opt in
       "fdisk")
           fdisk /dev/sda
           ;; 
       "cfdisk")
           cfdisk
           ;;
       "continue")
           break
           ;;
       *) echo "invalid option $REPLY"
           ;;
   esac
done

這是螢幕上的結果:

1) fdisk
2) cfdisk
3) continue
[ menu ] choose partition tool: 

我怎樣才能改變這樣的佈局(?):

[ menu ] choose partition tool (1) fdisk (2) cfdisk (3) continue:

簡而言之,我知道在 PS3= 中編寫選項就足夠了:*PS3=’$$ menu $$選擇分區工具 (1) fdisk (2) cfdisk (3) continue:’*但我想知道如何不顯示選項列表(根據描述)。

您必須為您select自己的自定義版本編寫程式碼。像這樣的東西可能會起作用:

#!/bin/bash
#
PS3='[ menu ] choose partition tool:'
options=('fdisk' 'cfdisk' 'continue')

while :
do
   printf '%s' "$PS3"
   for ((i = 0; i < ${#options[@]}; i++))
   do
       printf ' (%d) %s' $((i+1)) "${options[i]}"
   done
   read -p ': ' opt

   case "$opt" in
       1|"fdisk")
           fdisk /dev/sda
           ;;
       2|"cfdisk")
           cfdisk
           ;;
       3|"continue")
           break
           ;;
       *) echo "invalid option $opt"
           ;;
   esac
done

引用自:https://unix.stackexchange.com/questions/701843