koheitakahashiのブログ

2020.07.01にプログラマーとして生を受けた私が学んだことや、日常について徒然に書いていきます。

Linuxのシェルスクリプト作成で私がつまづいたところ🥶

Linuxゲリラ戦記を読み、挙げられている例を、手を動かしながら進めていたところ、シェルスクリプトの作成で3日間ほど、詰まってしまいました💦 自分の覚書として、その理由をまとめます❗️

何に詰まったのか?

Linuxゲリラ戦記の#38〜#52で紹介されている、APIを利用した画像収集のシェルスクリプトを作成している時です。

私はとてもわかりやすくまとめられた以下のサイトの手順を参考に進めていました。

そして、いざ、自分でシェルスクリプトを以下のように作成してみました。

f:id:NMP300:20190705112557p:plain
実際のシェルスクリプト

そしたら、こんなエラーが出てしまいました。

f:id:NMP300:20190705111909p:plain
こんなエラーが出現

ちなみに、

$ curl "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key={api key}&cx={ID}&per_page=20&text=${keyword}&extras=url_q" > response.txt

と、普通にシェルスクリプトに入れず、プロンプトをするとエラーを出さずに実行してくれます🤔 何故だろうか、グーグルで検索しても有力な回答は調べることができず、1日ほど悩みました😱

エラーの原因は?

fjordbootcampの先輩方に教えていただき、エラーの原因が判明!! それは、シェルスクリプト内の無駄なインデントでした

上記のシェルスクリプトを見てもらうと、curlの2行目から無駄なインデントがあります。これは、私自身が見易さを重視した結果なのですが、\は次の行を単純に統合するメタキャラクタです。そのため、私の無駄なインデントも引数内に統合されてしまい、エラーが出てしまったようです😨

そのため、無駄なインデントを削除した結果、無事にシェルスクリプトが実行され、きちんと、ウェブのファイルを取って来てくれました😆

感想

初めてシェルスクリプト 作成、本当に時間がかかってしまいました。エラーの原因が分からず、ウンウンと頭を悩ませる時間が多かったですが、実行されているシェルスクリプトを見ると達成感が込み上げてきて、とても嬉しかったです💪

ほんの少しだけシェルスクリプトに対して抵抗がなくなったので、シェルスクリプトを用いて作業効率化をしてみたくなりました😆

参考サイト

プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話