Linux 如何使用Bash将命令输出列表生成菜单选项列表?

Linux 如何使用Bash将命令输出列表生成菜单选项列表?,linux,bash,shell,Linux,Bash,Shell,如何使用Bash将命令输出列表生成菜单选项列表 命令:mount | grep/media | awk'{print$3}列出我的计算机上所有已装入的USB存储 它可以是空的,也可以是多行 当它为空时,我将回显一条消息 当它是多行时,我想将此输出设置为菜单选项列表,如下所示: AAA BBB CCC 困难在于,输出的行数不是固定的,所以菜单将是不固定的选择 我被卡住了。这里有一些有用的东西: #!/bin/sh output=$(mount|grep /media|awk '{prin

如何使用Bash将命令输出列表生成菜单选项列表

命令:
mount | grep/media | awk'{print$3}
列出我的计算机上所有已装入的USB存储

  • 它可以是空的,也可以是多行
  • 当它为空时,我将回显一条消息
  • 当它是多行时,我想将此输出设置为菜单选项列表,如下所示:

  • AAA
  • BBB
  • CCC
困难在于,输出的行数不是固定的,所以菜单将是不固定的选择


我被卡住了。

这里有一些有用的东西:

#!/bin/sh

output=$(mount|grep /media|awk '{print $3}')

if [[ -z $output ]]; then
    # output is empty
    echo "Empty not found"
else
    # output is not empty
    echo $output
fi

您能否提供输出的预览,以便我也可以对其进行格式化

以下是一些有效的方法:

#!/bin/sh

output=$(mount|grep /media|awk '{print $3}')

if [[ -z $output ]]; then
    # output is empty
    echo "Empty not found"
else
    # output is not empty
    echo $output
fi

您能否提供输出的预览,以便我也可以对其进行格式化

如果您确实希望列表项以
#)的方式进行编号
可以这样做

#/bin/bash
计数=0
以美元为单位(挂载| grep'/media'| awk'{print$3}');做
计数=$((计数+1))
回显“${count})$每个”
完成
如果[“$count”-等式0];然后
回显“未找到磁盘”
fi

末尾的if语句触发if循环,因为结果为零,因此从不运行

如果您确实希望列表项以
#)
的方式进行编号,您可以这样做

#/bin/bash
计数=0
以美元为单位(挂载| grep'/media'| awk'{print$3}');做
计数=$((计数+1))
回显“${count})$每个”
完成
如果[“$count”-等式0];然后
回显“未找到磁盘”
fi

末尾的if语句触发if循环,因为结果为零,因此从不运行

根据您的描述,我理解您喜欢根据给定的命令输出动态创建菜单或选择列表。一个可能的解决方案可以是

#!/bin/bash

# Gather the USB drives into an array
unset DRIVES
while IFS= read -r LINE; do
  DRIVES+=("${LINE}")
done < <(mount -l | grep /dev/sd | awk '{print $3}') # < You may change this for your needs ... since I dont have USB in my VM

# Iterate over an array to create select menu
select USB in "${DRIVES[@]}" "Quit"; do
  case ${USB} in
    /)
      echo "Drive ${USB} selected"
      # Further processing
      ;;
    "Quit")
      echo "Exit"
      break
      ;;
    *)
      echo "Not available"
      ;;
  esac
done
#/bin/bash
#将USB驱动器收集到阵列中
取消设置驱动器
而IFS=读取-r行;做
驱动器+=(“${LINE}”)

完成<根据您的描述,我理解您喜欢根据给定的命令输出动态创建菜单或选择列表。一个可能的解决方案可以是

#!/bin/bash

# Gather the USB drives into an array
unset DRIVES
while IFS= read -r LINE; do
  DRIVES+=("${LINE}")
done < <(mount -l | grep /dev/sd | awk '{print $3}') # < You may change this for your needs ... since I dont have USB in my VM

# Iterate over an array to create select menu
select USB in "${DRIVES[@]}" "Quit"; do
  case ${USB} in
    /)
      echo "Drive ${USB} selected"
      # Further processing
      ;;
    "Quit")
      echo "Exit"
      break
      ;;
    *)
      echo "Not available"
      ;;
  esac
done
#/bin/bash
#将USB驱动器收集到阵列中
取消设置驱动器
而IFS=读取-r行;做
驱动器+=(“${LINE}”)

完成<欢迎使用堆栈溢出。这也是一个面向专业和热情程序员的问答页面。在问题中添加您自己的代码。你至少要展示你自己为解决这个问题所做的研究。你的目标是一个列表还是一个菜单,哪个菜单会有其他用途,并且实际上是可选择的??欢迎来到Stack Overflow。这也是一个面向专业和热情程序员的问答页面。在问题中添加您自己的代码。你至少要展示你自己为解决这个问题所做的研究。你的目标仅仅是一个列表,还是一个菜单,哪个菜单会有其他用途,并且实际上是可选择的??