シェルスクリプト 練習 ドリル|研修コースに参加してみた
今回参加したコースは シェルスクリプト練習ドリル です。
このコースは、以前にレポートした シェルスクリプト 入門 の続きとして、用意された練習課題をもとに、ドリル形式で演習するコースでした。
シェルスクリプトは IT エンジニアの業務をサクッと自動化してくれる便利なツールなので、重宝するものですが、やはりプログラミング同様に、シェルスクリプトも一杯写経して、一杯書かないことには上達しません。
そこでドリルでステップを踏みながら、設定ファイルを作る、ログを残すといった、インフラエンジニアが行うことが多い定期業務をイメージした課題で、日頃の業務の自動化のヒントになりました!
では、どのような内容だったのか、レポートします!
もくじ
コース情報
想定している受講者 |
|
---|---|
受講目標 |
|
講師紹介
この「参加してみた」レポートでは久々の登場となる 岩木 慎一 さんが登壇されました!
大手 SI 企業にてプログラマ、 SE としてシステム開発およびプロジェクトリーダーを担当後、外資系ソフトウェア企業にて資格取得研修用の教材の開発および、認定インストラクタ向けのインストラクションを担当。
現在は研修講師として LAN 、セキュリティ、サーバ構築やプロジェクト管理研修、 Java や開発演習など幅広く登壇。 SE カレッジでは主にネットワーク・インフラ分野を担当
自己紹介のあと、今日の演習にあたってフォローされました。
- 10 個の演習問題があります
- 解答は 1 つではありません
- 全部ができなくても OK です
シェルスクリプトの実行環境、今昔
演習を行うにあたって、最初にシェルスクリプトの実行環境をいくつか紹介されました。お好みの方法で OK とのことなので、読者のみなさまの演習時のご参考になれば!
- 今は Windows で Linux が動くのでシェルスクリプトを実行できる
- Windows 10 なら WSL 2 ( Windows Sub System for Linux 2) を有効化する
- ブラウザでもシェルスクリプトを実行できる
- Paiza.io
- 登録なしで使える
- Paiza.io
- コース参加者には昔ながらの仮想環境 Virtual Box も用意
私は WSL を有効化しているので (エヘンエヘン、でも version 1 。移行をサボってます) 、こっちを使います。
シェルスクリプトの書き方をおさらい
シェルスクリプトの構文を復習したのですが、以前にも入門コースでレポートしていますので、ここでその入門で触れなかったお話を紹介します。
- 計算
- expr 式 (ex.
expr 100 + 20
) - bash のみで使える $((式)) (ex.
echo $(( 100 + 20 ))
)
- expr 式 (ex.
- ランダムな数値を取得するには bash なら
$RANDOM
という変数を使うとできる- もしくは od コマンドと疑似乱数を提供する
/dev/urandom
ファイルを使う
- もしくは od コマンドと疑似乱数を提供する
シェルスクリプト 練習 ドリル
では、練習ドリルをやってみましょう。ここでは 10 問のうち 5 問を紹介しますので、全問挑戦したい方はぜひコースにご参加下さい!
課題 1 メッセージの表示
このサーバーは 10 分後に停止します。
速やかに作業を終了しログアウトしてください。
できた方は、コマンドライン引数でサーバー停止までの時間 (分) を指定できるようにしてみてください。
解答と解説
#!/bin/sh
echo "このサーバーは10分後に停止します。"
echo "速やかに作業を終了しログアウトしてください。"
応用編は以下です。
#!/bin/sh
echo "このサーバーは${1}分後に停止します。"
echo "速やかに作業を終了しログアウトしてください。"
- 1 つめの引数は 1 という変数に入る
課題 4 ファイル内の単語、行を数える
32
2
以下の内容で作成してください。
I am a cat. As yet I have no name. All I remember is I was meowing in a dampish dark place when, for the
first time, I saw a human being.
解答と解説
#!/bin/sh
words=`cat $1|wc -w`
lines=`cat $1|wc -l`
echo $words
echo $lines
- 単語数は
wc -w ファイル名
で、行数はwc -l ファイル名
でカウントできる- ただし、ファイル名も表示されてしまう
- 一度 cat コマンドを実行し、結果をパイプして wc にファイル内容を渡している
課題 5 入力値の表示
ボックス部分が入力値
あなたのお名前は?: 鈴木イチロー
こんにちは鈴木イチローさん!
解答と解説
#!/bin/sh
read -p "あなたのお名前は?:" name
echo "こんにちは${name}さん!"
- ユーザーに入力させるには read を使う
read -p "メッセージ" 変数
- 止まって入力を待つ
- 入力内容が変数に入る
課題 6 設定ファイルを作る
ボックス部分が入力値
IP アドレス: 192.168.100.2
プリフィックス値: 24
デフォルトゲートウェイ: 192.168.100.244
入力の結果として以下の内容の netconfig.txt ファイルが作成される。
( cat コマンドで内容を確認すると以下のようになれば正解)
### network settings ###
ip address:192.168.100.2/24
gateway:192.168.100.254
解答と解説
#!/bin/sh
read -p "IPアドレス:" ip
read -p "プリフィックス値:" pf
read -p "デフォルトゲートウェイ:" gw
echo "### network settings ###" > netconfig.txt
echo "ip address:${ip}/${pf}" >> netconfig.txt
echo "gateway:${gw}" >> netconfig.txt
- ファイル出力で簡単なのはリダイレクト
>
で上書き>>
で追記
課題 9 おみくじ
- 大吉
- 10 %
- 中吉
- 20 %
- 吉
- 40 %
- 凶
- 20 %
- 大凶
- 10 %
(メッセージは任意)
大吉 あやかりたい!!
ランダムと配列を上手く使いましょう
解答と解説
#!/bin/sh
omikuji=(
"大吉 あやかりたい!!"
"中吉 いいじゃないですか!"
"中吉 まずますですな!"
"吉 ふむふむ"
"吉 なるほど"
"吉 はいはい"
"吉 ほほう"
"凶 まぁ気にせず"
"凶 あらあら"
"大凶 ぎゃ、逆にこれは・・・!!")
i=$(($RANDOM % 10))
echo ${omikuji[$i]}
- 確率には乱数と配列を使う
- 配列の宣言
array=("a" "b" "c")
- 配列へのアクセス
${array[$i]}
- 確率は 10 % 単位なので要素が 10 個の配列を用意
- 10 % なら 1 個、 20 % なら 2 個、同じ結果を入れる
- 乱数は $RANDOM
- そのままでは大きな範囲なので 10 で割った余りを使う
$RANDOM % 10
- そのままでは大きな範囲なので 10 で割った余りを使う
まとめ
最後はちょっとしたゲームもある遊び心がある練習ドリルでしたが、シェルスクリプトの課題を 10 問演習しました。
最終的に、設定ファイルやログを残すような、インフラエンジニアの定番作業の自動化に取り組めそうな内容だったので、自動化の練習にはもってこいでした。
こういった日頃の業務の自動化の次に、サーバ構築の自動化が出てきますので、マスター後はぜひ以前にレポートした シェルスクリプトで サーバ構築 自動化 のコースにご参加下さい!
label SEカレッジを詳しく知りたいという方はこちらから !!
IT専門の定額制研修 月額28,000円 ~/ 1社 で IT研修 制度を導入できます。
年間 670 コースをほぼ毎日開催中!!
SEプラスにしかないコンテンツや、研修サービスの運営情報を発信しています。