フォルダパスで$ 1を使用する方法

フォルダパスで$ 1を使用する方法

私はLinuxスクリプトに初めて触れたので、誰かがこの質問をしたら謝ります(公開する前にかなりの検索をしました)。

特定の文字の組み合わせがバックアップファイルに表示されることを確認する簡単なスクリプトを作成しています。これらのファイルのパスはデバイスによって異なり、ファイルが多いため、テキストファイルで確認する必要があるファイルのリストがあります。

私がやりたいことは、catファイルを作成し、そのデバイスフォルダのパスにデバイス名を挿入してから、最新のバックアップファイルを確認することです。例えば

cat devicelist.txt  | grep A[BCD] /folder1/folder2/$1/latest

これによりエラーが発生します。/latest: No such file or directory

それでは、私が何を間違っているのでしょうか?

答え1

お客様の要件を正しく理解したら、xargs次のように使用できます。

cat devicelist.txt | xargs -d'\n' -I{} echo grep 'A[BCD]' "/folder1/folder2/{}/latest"

または(ファイルを直接読んでください)

xargs -a devicelist.txt -d'\n' -I{} echo grep 'A[BCD]' "/folder1/folder2/{}/latest"

echo必要に応じて動作すると確信している場合は削除してください。

man xargs詳細とプラットフォームで利用可能なオプションの完全なリストについては、リソースを参照してください。

答え2

$ 1は、スクリプトに渡されたパラメータ(最初のパラメータ)を表します。

だからあなたは使用することができます

#!/bin/bash
grep A[BCD] /folder1/folder2/"$1"/latest

役に立たないときはgrepを使用しないでください。 :) "$1" を使用すると、変数の内容を保存できます。

-bash-4.4$ mkdir test
-bash-4.4$ mkdir -p test/folder/a/latest
-bash-4.4$ cat > t.sh
#!/bin/sh
grep A[BCD] test/folder/"$1"/latest/toto
-bash-4.4$ chmod u+x t.sh
-bash-4.4$ echo ABCD > test/folder/a/latest/toto
-bash-4.4$ ./t.sh b
grep: test/folder/b/latest/toto: No such file or directory
-bash-4.4$ ./t.sh a
ABCD
-bash-4.4$ rm t.sh
-bash-4.4$ rm -rf test
-bash-4.4$ 

フォルダパスが見つからないときにgrepエラーメッセージを回避するには、存在しない$ 1の値をスクリプトに残すこともできます。

答え3

あなたはそれを使用することができます

grep 'A[BCD]' "/folder1/folder2/$1/latest" <devicelist.txt

パラメーターを使用して呼び出すスクリプトから。

シェルで同じ動作をシミュレートするには、まず次のことを行う必要があります。

set -- foo

それから$1foo

関連情報