2016-08-10 8 views
0

要件:保管コマンドライン引数は、引数はスペースで区切られた整数または整数を含むファイルを指定でき

  1. パラメータ shのテストとして含むファイル番号(433 434 435)を送信することができそうでないファイル(433 434 434) SH Test.sh 434 435 436

場合.SH MYFILE.TXT

  • パラメータは直接数値することができ、それがパラメータとしてファイルと数字の両方をサポートする必要がある

    以下は私が書いたコードですが、以下のforループではすべての数値が文字列として出力されていますが、入力値が3のときにforループを3回実行する必要があります。 ループのいずれの場合においても

    パラメータ回数を実行しなければならない(FILEDATAパラメータまたは直接入力をdeterminies):配列シェルスクリプトで

    Iamは比較的新しいシェルスクリプトへ

    出力の一部 予期しないバグがある場合はアドバイスをお願いいたします。

    #!/bin/bash 
    echo -e [email protected] 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 [email protected]`; 
         echo $tcId; 
    else 
         [email protected]; 
         echo $tcId; 
    fi 
    
    # Execute each of the given tests 
    for testCase in "$tcId" 
    do 
        echo "Test Case is "$testCase ; 
    done 
    
  • 答えて

    0

    明示的な引数がファイル内にある "ふりをする"ためにプロセス置換を使用します。

    while IFS= read -r testCase; do 
        echo "Test case is $testCase" 
    done < <(if [ -f "$1" ]; then 
           cat "$1" 
          else 
           printf "%s\n" "[email protected]" 
          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 
    
    +0

    私のコードを今作業しているものに編集しました。失敗の場合はアドバイスをお願いします。 – user2256825

    +1

    質問に答えた後に大きな変更を加えないでください。新しい質問を開きます。 – chepner

    +0

    私は、第二の選択肢をはっきりと理解していますが、説明してください。 – user2256825

    関連する問題