
引数/パラメータをファイルとして使用してbashスクリプトを実行しています。スクリプト内でこれらのファイルの内容をどのように取得できますか?
次のコマンドラインを使用してスクリプトを実行します。
sh script_name animal.txt stars.txt
animal.txt
「キリン」が付属しています。
スクリプトから(キリン)の内容をどのように取得しますかanimal.txt
?私はbashスクリプトに初めて触れたので、助けてくれてありがとう。
答え1
for f do exec <"$f"
: handle stdin
done
非対話型シェルは、読み取れない場合や特殊な組み込み関数に関連付けられているときに存在しないファイルからのすべてのリダイレクトを致命的なエラーとして処理し、すぐに終了し、意味のある診断メッセージをstderrに書き込みます。したがって、引数が有効で読み取り可能なファイルであり、その: ...
部分を便利なものに置き換えるか、ユーザーが誤った引数を提供し、スクリプトが意味のあるように終了しない限り、上記の文は役に立ちません。
これで...
for var in ...; do : compound command list on "$var"; done
このin ...;
ビットは、基本セット(つまりパラメータリスト)をパラメータセットに置き換えることができる構文のオプションの文です。
だから...
for var do : compound command list on "$var"; done
...あなたが探しているものがここにあるかもしれません。
for f do exec <"$f"
: now do some stuff w/ stdin
done
...ここで、シェルはスクリプトに与えられたすべての引数をstdinに繰り返し割り当て、読み取り可能なファイルとしてチェックし、すべての引数が使い果たされ、ループがexec
終了for
するまでステートメントの後のすべてのコマンドを使用できるようにしますdone
。これを実行できない場合は、ユーザーフレンドリーな標準形式でエラーメッセージをフォーマットして印刷します。
答え2
first_file="$1"
test -f "$first_file" || exit 2
file_content="$(<"$first_file")"
echo "$file_content"
答え3
できます:
#!/bin/bash
while read line ;
echo "$line"
#######
#######
########
done < "$1"
説明: 各 $line はファイルの完全な行の内容です。
usage : ./script.sh file.txt