【问题标题】:Arguments to a shell script from a text file来自文本文件的 shell 脚本的参数
【发布时间】:2017-03-08 07:37:45
【问题描述】:

我有一个文本文件(Text.txt),内容如下,

  1. 名称 1 文本 1
  2. 姓名2
  3. 名称3文字3

我想编写一个 shell 脚本,我必须将 Name1、Name2 和 Name3 作为第一个参数,将 Text1/Text3 作为第二个参数。 条件:如果存在第二个参数,我的脚本应该检查每一行。

我的输出应该显示如下:

  1. Arg1:名称1 Arg2:文本1
  2. Arg1:名称 2 Arg2:未找到任何参数
  3. Arg1:名称3 Arg2:文本3

我不知道从哪里开始。 谁能帮帮我。

【问题讨论】:

  • 你能提供你想要的输出吗?你试过什么?
  • 我的输出应该显示如下: Arg1: Name1 Arg2: Text1 Arg1: Name2 Arg2: Arg1: Name3 Arg2: Text3
  • 请用该信息更新您的问题。

标签: bash shell csh


【解决方案1】:

while 循环中使用read

while read -r cmd args; do
  printf "Arg1: %s Arg2: %s\n" "$cmd" "${args:-No args found}"
done < Text.txt

这里使用 Bash 参数扩展与 ${args:-No args found} 一起设置 $argsNo args found 值是未设置还是 null。

我删除了前导数字,因为我不确定它们是否存在于您的文本文件中。

【讨论】:

    【解决方案2】:

    您可以运行以下命令:

    awk -F' ' '{ 
     printf $1" Arg1: "$2" Arg2: ";
     if(length($3)){
      print $3}
     else {
      print "No args found"}
     }' Text.txt
    

    它使用您想要的输入打印前两列,并检查第三列(带有if)的最后一个输出。

    编辑:如果行号(1.2. 等)不是文本文件的一部分,请将命令行更新为以下内容:

     awk -F' ' '{ 
      printf "Arg1: "$1" Arg2: ";
      if(length($2)){
       print $2}
      else {
       print "No args found"}
      }' Text.txt
    

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多