「シェルスクリプトを実際に作ってみる」
ような、教科書を教えて下さい。
当方、数か月前からシェルを触り始めた初心者で、シェルは find とか sed とか for loop とか便利な機能があるものの、うまく使いこなせずに困っております。
「ゼロから作る Deep Learning」や「6 日間で楽しく学ぶ Linux コマンドライン入門」のように、実際にコマンドを打ってみる形で勉強したいのですが、いい教科書をご存知でしたら教えてください。
匿名回答1号さん
回答ありがとうございます。とりあえずどちらか1冊、買ってみようと思います。
目的は
研究で、
python を使った機械学習(ディープラーニング)を行いたい
と勉強中です。
その前準備で、フォルダ内にあるファイルを集めてきたり(for loop + find)、名前を変えたり(for loop + sed)、展開、再圧縮したり(gzip -d, 各種処理, gzip)したりするのですが、コマンドがうまくかけない(書いたコマンドにエラーが出る、目的の結果にならない)ことが度々あり、一通り shell を学んだほうが良いと思ったためです。
ご指摘のように、上記のような普段使いで、レベルアップをすれば良いですね。サーバー管理などは必要ないです。
プログラミングの経験はありません。数ヶ月前に Win7 に VMware で Ubuntu 16と Ubuntu 14 を入れて、bash を触り始めました。
今は「ゼロから作る Deep Learning(書籍)」や「Udemy(インターネット講義サイト)」に書いてあるのを写経しながら、プログラムを勉強しています。
一段落したら C/C++言語なども学びたいと思っています。というのも、ディープラーニングで使う GPU コンピューティングの際に「CUDA」というソフト?を使う(と10倍以上学習が早くなる)そうで、これが C/C++を使った統合開発環境だそうで。
(参考:http://qiita.com/Keech/items/381495ed90e012d69f1a)
c-sh系は C言語に似せてあると聞くので、https://ja.wikipedia.org/wiki/C_Shell、c-sh を勉強しておくのは将来的に役立つかもです。
今のところ bash です。
コメント(3件)
・入門UNIXシェルプログラミング
・UNIXプログラミング環境
あたりを思い浮かべますが、「実際にコマンドを打ってみる形で」と言うとどうだろうって気はします。
それはさておき
目的はなんでしょう?
サーバ管理で使いたいのか、汎用のコマンドを作りたいのか、ついでにプログラミングを学びたいのか。
取り合えずプログラミングの経験はありますか?
シェルはプログラミング言語としてはクセが強すぎると思うので、その場合、まずはperlとかpythonとかでプログラミングに触れつつ、シェルは普通のシェルとして使いつつ、なれたらスクリプト書いていけばいいんじゃないでしょうか。
あとb-shですかcshですか?
rc*とか汎用のを作るならsh(b-sh)になると思いますが、普段使いのならcshかもしれません。
なんとなく、スクリプト書くより普段使いのレベルアップ図っていけば良い気がします。
(多少の汎用化はするけど普段のコマンドラインを並べたのがスクリプトなので)
今更間に合うのかどうかわかりませんが、一応書いておきます。
まず、なんとなく予想はしていたのですが、私のあげた2冊はどちらも多分微妙かもしれません。というのも、
「入門UNIXシェルプログラミング」は書名のとおりシェルプログラミングのための書で、シェルを対話型で使う上ではあまり縁のなさそうなことが半分ぐらいありそうです。
まあ、知らないよりは知っていたほうが良いことではあるんですが、シェルプログラミングの入門であってシェル操作の入門ではない感じだと思います。
「UNIXプログラミング環境」は何といっても古いです。原著が1983年なのでもう33年も昔の本です。
なので、今どき使わないようなものや、違っている事もあるかもしれません。そして、後半半分はC言語の入門となっています。
とはいえ、前半はまさにunixでプログラミングをするにあったって必要だったり便利だったりする処理だったりコマンドの使い方だったりしますし、ほとんどが今でも通用する内容だと思います。
というわけで、半分はOKだけど半分はずれてるかも?って本だったりします。
あと「UNIXプログラミング環境」のほうはもう中古でないとないようですね。
さて、ここまではシェルを使って色々やろう!って内容ですが、実はもう一つ手があります。
それは半分はpythonでやろう!って手です。
シェルはプログラミングもできますが、プログラミングということに関してはpythonなど、それ用に作られたものにはかないません。しかし、ファイル操作やgzip使ったりするのは得意です。
そこで良いとこどりします。
方法はpythonで、シェルで実行すべきコマンドを出力してやることです。
例えばディレクトリ中の特定のパターンのファイルのみファイル名を変えるとかの場合、pythonでlistdirとかgrobとか使って、forやifで選んだり文字列そうさして、最終的に必要なだけ「mv hogehoge fugafuga」とか出力してやります。
で、これをファイルにリダイレクトして保存して、内容を確認して、必要であれば修正して、それをシェルに渡してやれば実行してくれます。
端的に言えばpythonで簡単なシェルスクリプトを出力してやるわけですね。
これだとpythonで色々やる練習にもなると思いますし、一気に完璧にするんではなく、一部手動で修正もできますし。
どうでしょうか。
(というかちょっとわかりにくいかも知れませんが、わかります?)
あと、最後にcshがC言語に似てるかどうかってのは、一部そいういうところもある程度で、別物には違いないので、C言語やってた人にとっては似てる部分があるなとは思えるかもしれませんが、csh使ってる人がC言語覚えやすいかといえば大差ないです。
周りに詳しい人がおらず、独学でやってますので、いろんな情報がありがたいです(pythonとshで半々でやれば良い、cshとC言語は似てるけど違う)。
私は基本的に知識0なので、どんな教科書でも役に立つだろうと思います。
「講義スタイルの教科書で体系的に勉強したい」と思っていましたが、日々シェルを少しずつ使っていくことで、少しずつレベルアップできたらと思います。
入門UNIXシェルプログラミングを注文しました。
Amazonでも評価高く、いい本のようですよね。
色々教えてくださり、どうもありがとうございます。