【问题标题】:Concatenate Unknown Multiple Text Files While Inserting a Divider After the Contents of Each File Shell Script在每个文件外壳脚本的内容后插入分隔符时连接未知的多个文本文件
【发布时间】:2020-01-18 15:25:53
【问题描述】:

对于shell脚本中的这个问题,我需要接受未知数量的文本文件并将它们连接起来。但是我需要在每个文件的内容之后放置一个分隔符,例如(-----)。脚本还需要有一个退出代码,如果它成功,那么它会打印出正确的输出。但是如果它失败了,它需要打印出这个帮助信息,“Usage...”(它很长,帮助信息本身并不那么重要。)

我已经想出了如何接受多个文本文件来连接它们,但问题真的是分隔符。

我还想出了如何使用 cat 显示帮助消息,但问题是我不知道我需要为 if 和 else 语句设置什么条件,因为条件本身没有按预期工作。 例如,如果它可以找到 txt 文件并打印输出,它会按预期工作,但是如果没有 txt 文件,它就不会打印帮助消息。

我很确定它必须是某种循环语句才能使分隔符起作用,但问题是我不知道该怎么做。甚至不确定条件。

# Don't know what condition to put for the if here
if [ $? -eq 0 ]
then
 # Don't know what condition to put for the for loop here
 for j in "$?" 
 do 
   cat *.txt
   echo "-----"
 done
exit 0
else
 cat <<< "Usage..." >&2
exit 1
fi

假设我们有 2 个文本文件。 one.txt 有:

Hello

两个.txt 有:

Happy

如果代码按预期运行,输出应该是:

Hello
-----
Happy
-----

【问题讨论】:

  • 您可以在while循环中同时读取两个文件,然后一个接一个地打印。

标签: linux bash shell


【解决方案1】:

这些行中有什么?

#!/bin/bash

for param in $@; do
  if [[ -f $param ]]; then 
    cat $param 
    echo "-----" 
  else
    echo "wrong parameter passed! usage:..." 
    exit 1
  fi
done

exit 0

快速解释:

for param in $@; do

遍历传递给脚本的每个参数

[[ -f $param ]]

这会检查参数是否为现有文件

【讨论】:

  • 是的,围绕这些行。它编译但它不打印。我认为它缺少要打印的东西。让我知道你是否明白了。感谢您的帮助!
  • 您是否尝试过使用绝对路径而不仅仅是文件名? IE.: cat /location/of/file.txt
  • 不尝试做一个文件名。它需要接受该特定目录中的所有文本文件。
  • @user20304030 - 它编译…… - 你如何编译一个 shell 脚本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多