初めましてshoです。
”tarアーカイブしたものを別のサーバにコピーする”
というシェルスクリプト作成の際に初心者過ぎてこんなこと考えました。
「$@に複数のディレクトリもアーカイブファイル名も接続先のホスト名もIPもパスも全部入れたい。でもディレクトリが決まった個数ではない場合どうすればいいんだ・・・」
※後日こんなに難しくしなくていいって言われました
調べてもそれっぽい記事が見つからなかったので試しに
”dir1 dir2” と書いてみました。
結果、「$1に二つともちゃんとディレクトリとして入ってる!」
もしかしたら普通に使われていること?
それともそもそもそんな使い方しない?
そこらへんはわかりませんがめっちゃ感動しました。
それでは以下私がテストした内容です。
(※学習記録やメモ書き目的で始めました。ほぼ初学者レベルなので理解が浅いところや誤りがあるかと思いますがよろしくお願いします。またアドバイス等コメントいただけるとすっごく嬉しいです。早く先輩方のお力になれるよう精進します。)
#テストした内容
- スクリプト実行時 「スクリプト名 ”dir1/ dir2/ dir3/” file1 file2」として$1〜$3に格納しtarアーカイブする
- echo で$1〜3を出力
- アーカイブされたものがちゃんと元のディレクトリか展開する
##シェルスクリプト
1 #!/bin/sh
2
3 echo '$1=' $1
4 echo '$2=' $2
5 echo '$3=' $3
6
7
8 tar_name="$(date +%Y%m%d).tar"
9
10 tar -cvf ${tar_name} $1
11
##テスト
テストで使うディレクトリ、ファイル一覧
# ls -FR
.:
dir1/ dir2/ dir3/ file1 file2 file3
./dir1:
file1 file2
./dir2:
file2 file3
./dir3:
file3
シェルスクリプト実行と実行結果
- スクリプト実行時 「スクリプト名 ”dir1 dir2 dir3” file1 file2」として$1〜$3に格納しtarアーカイブする
- echo で$1〜3を出力
# test-tar "dir1/ dir2/ dir3/" file1 file2
$1= dir1/ dir2/ dir3/
$2= file1
$3= file2
dir1/
dir1/file1
dir1/file2
dir2/
dir2/file2
dir2/file3
dir3/
dir3/file3
# ls
20210312.tar dir1 dir2 dir3 file1 file2 file3
実行結果の確認
- アーカイブされたものがちゃんと元のディレクトリか展開する
# rm -rf dir1 dir2 dir3 file1 file2 file3
# ls
20210312.tar
# tar xvf 20210312.tar
dir1/
dir1/file1
dir1/file2
dir2/
dir2/file2
dir2/file3
dir3/
dir3/file3
# ls
20210312.tar dir1 dir2 dir3
# ls -RF
.:
20210312.tar dir1/ dir2/ dir3/
./dir1:
file1 file2
./dir2:
file2 file3
./dir3:
file3
改めて、こんな使われかたしているのか疑問、不安ですが、ちょっといい発見した気分です。
以上!