linux - 根据文件输入执行不同功能的 Shell 脚本

标签 linux bash shell sh

我正在尝试将两个截然不同的脚本合并在一起,以实现整合和易用性。我知道我希望这些脚本的外观和操作方式,但我需要一些入门帮助。以下是脚本的流程和外观:

输入文件将是具有以下语法的标准文本文件:

#Vegetables
Broccoli|Green|14
Carrot|Orange|9
Tomato|Red|7

#Fruits
Apple|Red|15
Banana|Yellow|5
Grape|Purple|10

该脚本将采用该文件的输入。它会忽略注释部分,但使用它们来指示输出。因此,基于它是 Vegetable 的事实,它将使用分隔符 (|) 之间列出的值执行特定功能。然后它会转到 Fruits 并根据该分隔符对值执行不同的操作。也许,我会将蔬菜/水果添加到其中一个值,并根据该值在此循环中读取文件时执行该功能。感谢您为开始此工作提供的帮助。

更新: 所以我尝试实现 IFS 设置并想到了更合乎逻辑的安排。输入文件的参数中将显示“类别”。所以设置将是这样的:

Vegetable|Carrot|Yellow
Fruit|Apple|Red
Vegetable|Tomato|Red

从那里,脚本将读入行并执行该功能。所以在 shell 中基本上是这种类型的设置:

while read -r category item color
do
    if [[ $category == "Vegetable" ]] ; then
        echo "The $item is $color"
    elif [[ $category == "Fruit" ]] ; then
        echo "The $item is $color"
    else
        echo "Bad input"
 done < "$input_file"

类似的事情......我只是很难将它们放在一起。

最佳答案

使用read来输入行。对它们的前缀做一个 case 语句:

{
  while read DATA; do
    case "$DATA" in
       \#*) ... switch function ...;;
         *) eval "$FUNCTION";;
    esac
  done
} <inputfile

根据您的问题,您可能需要在读取之前尝试设置 $IFS 并一次性读取多个变量。

关于linux - 根据文件输入执行不同功能的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140062/

相关文章:

linux - 配置 Apache 以允许禁止目录列表

linux - 将 shell 脚本变量设置为命令的输出

bash - FizzBu​​zz 示例中的 Bash 语法是什么

shell - 合并多个文本文件并删除重复项

linux - Grep 显示匹配和不匹配

linux - 如何在服务器上自动挂载 raspberry openelec sd

linux - sles12 docker 上的语言环境命令失败

bash - 如何通过Bash中的curl从谷歌驱动器下载大文件?

linux - 即使 "expect"不匹配任何东西,是否可以继续执行

bash - bash:如何将脚本名称分配给变量并从另一个脚本调用它