在数组中存储命令行参数,参数可以是整数或包含由空格分隔的整数的文件

时间:2016-08-10 10:38:18

标签: arrays bash shell loops sh

要求:

  1. 能够发送包含数字(433 434 435)的文件作为参数 sh Test.sh myFile.txt
  2. 如果不是文件,参数可以是数字(433 434 434) sh Test.sh 434 435 436
  3. 因此,它必须同时支持文件和数字作为参数

    下面是我尝试编写的代码,但在下面的for循环中,所有数字都打印成字符串,但我需要for循环运行三次,因为输入值为3。 如何将它作为shell脚本中数组的一部分

    Iam相对较新的shell脚本

    输出:

    在任何一种情况下,for循环必须运行参数次数(filedata确定参数或直接输入) 如果存在任何不可预见的错误,请提供建议

    #!/bin/bash
    echo -e $@ 2>&1 ;
    myFile=$1 ; // As the first parameter will be a file
    #[ -f "$myFile" ] && echo "$myFile Found" || echo "$myFile Not found"
    if [ -f "$myFile" ]; then
            tcId=`cat $@`;
            echo $tcId;
    else
            tcId=$@;
            echo $tcId;
    fi
    
    # Execute each of the given tests
    for testCase in "$tcId"
    do
         echo "Test Case is "$testCase ;
    done
    

1 个答案:

答案 0 :(得分:0)

我使用流程替换来"假装"显式参数在文件中。

while IFS= read -r testCase; do
    echo "Test case is $testCase"
done < <( if [ -f "$1" ]; then
              cat "$1"
          else
              printf "%s\n" "$@"
          fi
        )

如果您对脚本的调用方式很灵活,我会将其简化为从标准输入中读取测试用例

while IFS= read -r testCase; do
    echo "Test case is $testCase"
done

并以两种方式之一调用它,既不使用命令行参数:

sh Test.sh < myFile.txt

sh Test.sh <<TESTCASES
433
434
434
TESTCASES