![見出し画像](https://assets.st-note.com/production/uploads/images/98968661/rectangle_large_type_2_cf871d391f7c7c79b692c7ebb675272b.jpeg?width=1200)
シェルスクリプト while readを使って特定ファイルを削除する
はじめに
「while read 変数名」はファイルを一行ずつ読み込み、読み込んだものを変数に定義して処理してくれます。
今回は特定ファイルのみを削除していきます。while readがどういったものなのか一つの例として書いていきます。それでは早速順番に見ていきましょう。
書式
![](https://assets.st-note.com/img/1671541948402-HjovLPsYcP.png)
やりたいこと
特定のディレクトリ配下に存在している「aaaファイル」と「gggファイル」のみをwhile read文を使って削除する。
テストディレクトリの中身ファイル
/work/test配下のファイル一覧
testディレクトリには以下の5つのファイルが存在しています。
![](https://assets.st-note.com/img/1671544570545-IdxQlEL0p6.png)
sakujo_sitai.txtファイルの中身
![](https://assets.st-note.com/img/1671544728863-KAaXBIz668.png)
↑これはwhile readが読み込むファイル
sakujo_sitai.txtファイルを作成して、今回削除したい「aaaファイル」と「gggファイル」を書いています。
※touchコマンドでファイル作成、viコマンドで「aaa」「ggg」と記入
スクリプト実行ファイル
「test.sh」ファイルを作成して、実行文を書き込みます。
※スクリプト文では「if」と「testコマンド」を使用。
※上記同様touchコマンドでファイル作成、viコマンドで実行文を記入
![](https://assets.st-note.com/img/1671544918867-AMH0hbiwBT.png)
変数${LINE}が先ほど書いた「aaa」と「ggg」になります。
while readは「sakujo_sitai.txt」ファイルを一行ずつ読み込んでいき、一行ずつ処理をしてくれます。
ですので、1回目の処理は「rm -f /work/test/aaa」で、
2回目の処理が「rm -f /work/test/ggg」となります。
また、testコマンドについてですが、シェルスクリプトを書くときや判定結果を確かめておきたい場合などに役立ちます。
シェルスクリプトでは上記のように「[ ]」コマンドを使って書くこと多いですね。
-e [ファイル名] で「ファイルが存在するとき」です。
上記は「もしも${LINE}が存在するならrmコマンド文を実行する」という意味を持ちます。
スクリプト実行
では、スクリプトを実行していきましょう。
エラーなく終了したことを確認しました。
![](https://assets.st-note.com/img/1671545068326-xXzoBsmfYd.png)
確認
「aaaファイル」と「gggファイル」のみ削除できました。
![](https://assets.st-note.com/img/1671545231797-ns0b4cjsh3.png)
さいごに
いかかだったでしょうか。何となくイメージ掴めてもらえたら幸いです。