Bashスクリプトのファイルパラメータを取得する

Bashスクリプトのファイルパラメータを取得する

Bashを使用してテキスト操作スクリプトを実行しようとしています。スクリプトの場合は、次の構文を使用して入力用のテキストファイルをインポートしたいと思います。

./my_Script.sh < filename

このようにファイルから入力を取得できますか?入れてみよう

'>' test.txt

スクリプトの最初の行からデータを読み取ろうとしましたが、これは空のテキストファイルを作成するだけです。

答え1

達成したい目標によって異なります。

欲しいなら各行の処理入力ファイルで次のことができます。

#!/bin/bash
while read -r line; do
  echo "Next line: $line"
  # or something more useful.... :-)
done

その後、説明したようにこのスクリプトを呼び出すことができます。

./script.sh < input_file.txt

欲しいならファイル名を別のツールに渡す次のことができます。

#!/bin/bash

other_tool "$1"

次のようにスクリプトを呼び出します。

./script.sh input_file.txt

答え2

この入力リダイレクトをハードコードするには、次のexecコマンドを使用します。

exec < test.txt

それではあなたはできます。

while IFS= read -r line; do
    echo "got: $line"
done

答え3

そして

./script.sh <filename

スクリプトの標準入力全体をファイルに追加しますfilename。これは意味する何もないスクリプトの標準入力からの読み込みは、filenameファイルの終わりに達するまでファイルから読み取られます。

たとえば、上記の方法で呼び出すスクリプト(すべての文字を大文字に変更)は、次のように書くことができます。

#!/bin/sh

tr 'a-z' 'A-Z'

参考にするfilename<filename 議論ではないこれはスクリプトのコマンドですが、ファイルから出るようにスクリプトの標準入力を設定するシェルに発行されたコマンドです。

一方、次のようにスクリプトを実行すると、

./scripts.sh filename

これにより、ファイル名を$1スクリプトのように使用でき、ファイルを読み取るときに引用符を付ける必要があります。

#!/bin/sh

tr 'a-z' 'A-Z' <"$1"

または、

#!/bin/sh

filename=$1

tr 'a-z' 'A-Z' <"$filename"

これにより、同じファイルを複数回解析できますが、スクリプトの標準入力を介してコンテンツを読み取ると、ファイルを一度だけ読み取ることができます(たとえば、スクリプトの一時ファイルに保存して解析に使用しないcat >tmpfilename限り) )。 。

コマンドラインでスクリプトファイル名を指定すると、ループ内の任意の数のファイルを処理することもできます。

#!/bin/sh

for pathname do
    # code that processes "$pathname"
done

関連情報