現在指定されているファイルの入力を変数として探して空の場合は、ディレクトリ全体を処理するデフォルトのbashスクリプトがあります。
実行時にファイルを指定すると、そのファイルがscript.sh file1.txt
処理されます。
私が望んでいるが不明なのは、ワイルドカードを使用して複数のファイルを指定する方法です。たとえば、
script.sh file*.txt
単純なループが必要になるようですが、このシナリオと一致する例が見つかりません。
ループを実行しようとすると、最初の一致のみが処理されます。
#!/bin/bash
if [ $# -eq 0 ]; then
echo "no argument supplied, pulling all file from tick_tock"
for i in /var/tank/tick_tock/*.txt; do
cp "$i" /var/tank/awaiting/
done
fi
echo "you supplied $1"
cp "$1" /var/tank/awaiting/
ベストアンサー1
以下を使用してスクリプトを呼び出す場合:
$ script.sh file*.txt
一致するものがある場合、シェルは glob をファイル一致リストに展開します。たとえば、 、file1.txt
、 がfile2.txt
あると仮定すると、file3.txt
上記のコマンドは次のようになります。
$ script.sh file1.txt file2.txt file3.txt
順序は異なる場合がありますが、重要ではありません。
この状況でファイルを処理する1つのオプションは、次のループです。
while [[ $# -ne 0 ]]; do
# process ${1}
shift
done
shift
古い${1}
ものを捨てる移動する残りのパラメータは1だけ「左に移動」されます(2は1になり、3は2になります)。またshift
更新されました$#
。
たとえば、
#!/bin/bash
while [[ $# -ne 0 ]]; do
echo ${1}
shift
done
スクリプトを実行すると、以下が表示されます。
$ ./script.sh a b c
a
b
c
$