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