株式会社リゾーム 技術部 システム開発 第2グループの土井です。 「Linux標準教科書」読書会の第8回レポートです。第7回目のレポートはこちらです。 tech.rhizome-e.com
読書会の題材
前回に引き続きLinux標準教科書を題材としています。
8回目レポート
今回は「第9章 シェルスクリプト」で、参加者は5人でした。
それぞれの感想・意見交換
シェルとシェルスクリプト
- シェルスクリプトはほぼ書いたことがない
- カーネルを包み込んでいるからシェルという名が付いている、なるほど
- これが噂に聞くシェルスクリプトかと思った
- Windowsのバッチと似ていたため内容の理解はスムーズにできた
- バッチよりも書きやすそう…
シェルスクリプト
- 一次元の配列変数を扱う事が出来る
- set, unsetコマンドでシェル変数の一覧表示と削除が出来る
- バッチだとコメントはrem、シェルスクリプトは# でわかりやすい
- バッククォートで囲むことでコマンドとして解釈される
- JavaScriptのテンプレートリテラルに似ている
- ほぼ使わないからバッククォートのキーを忘れがち
- 1行目のシェルの指定、指定しなかったらどうなるんだろうか
- 現在のshellで実行って感じかな?
- パーミッションの変更
- これいつも変更し忘れてpermission error起こしてる
- 変数は値を参照したいときに$を頭につけるの、最初の頃はよくわからなかった
- read
- readコマンドで標準入力からシェル変数の内容を変更出来る
- コマンドツールを作るときに変数の値を標準入力から指定できれば便利そう
- 値が入ってなかったら標準入力から受け付けるとか
- 引数
- $0で実行コマンド名、$# で引数の数を参照できる事を知った
- 可長変な引数を受け付けたいときに便利なのかな
- 実際に使ったことは数えるくらいしかない
- shift文
- shiftコマンドで引数の順序をずらせる。どういう時に使うのだろうか
- 使ったことがないのでユースケースを知りたい
- 研究でログ取得のためにシェルスクリプトを作成したが、記法だったりは覚えられていないし知識が全体的に足りてないと感じた
条件分岐
- ファイルの属性を確認できるのは便利
- testコマンドまたは[ ]で評価するのは知らなかった
- 条件分岐の終わりはfiやesacで文字を逆にするのか
- 別の条件書く時は elif 。rubyだとelsifなので混乱する
- 比較演算子使った事なかったけど、eq, ne, ge等で書くのか
- 数値比較の演算子は>や<とかでは比較できないのか?
- 数値比較を行う演算子はかなり見にくいと感じた
- 数値比較は忘れてしまってエラーの原因になりそう
- 条件分岐と繰り返しはプログラムを書くうえで基本なので押さえておこう
繰り返し
- select文
- 数値による入力ができるのは知らなかった
- ユーザーに数値の入力を促せる事を知った
- 数値による入力を促すことができるのは結構使えそうだと思った
- for文
- 処理対象のリストが明確な場合にのみ使用できる感じで、明確でない場合はwhile文を使用すると解釈
- 動作が特殊で、ル-プには使えないことは気を付けようと思った
サブルーチン
- 言語設定によって出力される文字列が変わってしまうのは比較などする際に意識した方がいいところ
- 関数使ってまでシェルスクリプト書いた事ないな
- 関数とかメソッドとか呼ばれるやつをサブルーチンというのか
- Rubyだと聞かないので意識したことなかったけど、Goの「ゴルーチン」って言葉がよく分かってなくて少し気になってたのでスッキリした
実際のシェルスクリプト
- /etc/init.d/functionsの中の関数一度も使ったことない
デバッグ
- shに-xをつけて実行すると内容を確認できるのは知らなかった
- 変数の中身を表示しながら実行するのは便利
- sh -x でコマンドや変数の中身を表示できる事を初めて知った
- echoで変数の中身確認してた
- sh -xでコマンド、変数の中身を見れるのは便利な予感がする
- デバッグが必要な規模の自作シェルスクリプトを作ったことがないな...
- Dockerfileでビルドがうまくいかないときにデバッグ使えると便利だったりしそう
まとめ
今回はシェルスクリプトに関する記法などがメインでした。実際にシェルスクリプトには触れていても使っていない機能があるなという印象でした。私自身も忘れている部分などが多かったので復習に取り組みたいと思います。 次回は第10章「ネットワークの設定と管理」です。