シェルスクリプトの理解は進んだだろうか?
このページではシェルスクリプトの演習問題を用意してみた。ぜひ理解度チェックに試してみていただきた。
目次
Linuxシェルスクリプトの演習問題
- 「bash」シェルのバージョンを確認してみよう。
- 「bash」のプログラムファイルが何処にあるのか「which」コマンドで確認してみよう。
- 「echo」コマンドを使用して「hello_world」と表示してみよう。
- 「echo」で表示した文字列を「testfile」にリダイレクトしてみよう。
- パイプを使用してみよう。「ls」コマンドの結果をパイプで「sort」コマンドへ繋ごう。
- 「sh」ファイルを作成して「chmod」で実行権限を与えてみよう。
- 「sh」の一行目にスクリプトとして必要な文字列を記述しよう。
- 「sh」シェルスクリプトに「#」でコメントを記述してみよう。
- 「bash」シェルスクリプト「sh」で「echo」を利用して「hello_world」と表示してみよう。
- 「var-hello_world.sh」というファイルを作成して、スクリプト内で変数「STR=hello_world」と代入、それを「echo」で表示させてみよう。
- 「if」文を使用して条件分岐してみよう。「if-gt.sh」を作成し「$NUM」の値が0より大きければ「True」と表示させてみよう。
- 「for-list.sh」というファイルを作成し、「for」文を使用して文字列「one two three」をリスト表示してみよう。
- 「while-line.sh」というファイルを作成し「while」文と「read」文を組み合わせて「/etc/fstab」の中身を一行づつ表示してみよう。
- 「test-func.sh」というファイルを作成し、「hello_world」と表示する「myfunc」という関数を作成して実際に「myfunc」を呼出してみよう。
解答は下記に用意している。
・
・
・
・
・
解答
演習解答1
bashのバージョンを確認したい場合は「bash --version」とすると確認が出来る。
演習解答2
whichコマンドを使用すると、そのプログラムファイルがどこにあるのかパスを表示してくれる。シェルスクリプトを記述するときに1行目にシェルのパスを打ちこむ必要があるため、確認しておこう。
演習解答3
echoコマンドを使用するとechoコマンドに渡した文字列が表示される。なお「$」などから始まる文字列の場合変数参照扱いになる。
演習解答4
リダイレクトとは「入出力先を変更する」ことをさす。今回の場合
$ echo hello_world > testfile
などとすれば良い。
演習解答5
「ls| sort」とするとlsの内容がソートされて表示される。lsとsortの間にあるものを「パイプ」と言う。パイプはあらゆるコマンドを連結出来る。数にこれといった制限はないが大概の場合2つほどで用事は片付くはずだ。
演習解答6
touchもしくはエディタなどで作成したファイルを、スクリプトとして実行するには実行権限を与える必要がある。「chmod 755 hellow_world.sh」とするのが一般的だ。もしくは他人に実行されたくない場合は「chmod 700 hellow_world.sh」とするとよいだろう。
演習解答7
bashシェルスクリプトの場合一行目には「#!シェルのパス」を記述する必要がある。今回の場合「#!/usr/bin/bash」と記述する必要がある。
演習解答8
コメントをスクリプト内にのこしたい場合は行頭に「#」と記述する。その行はコメントとなり、コマンドとして解釈されなくなる。
演習解答9
シェルスクリプトを実行して「hello_world」と表示する場合
1 2 3 4 5 6 7 |
#!/usr/bin/bash # コメント # hello_worldと表示 echo hello_world |
などとするとスクリプトで「hello_world」を表示できる。
演習解答10
bashでは$を先頭につけた文字列を変数参照として扱うことになっている。
1 2 3 4 5 |
#!/usr/bin/bash STR=hello_world echo $STR |
とすると「hello_world」が表示される。
演習解答11
if文を使うと条件分岐ができる。今回の「$NUM」の値が0より大きい場合「True」と表示されるようになっている。
1 2 3 4 5 |
#!/usr/bin/bash NUM=1 if [ $NUM -gt 0 ] ; then echo True fi |
演習解答12
for文を利用すると主にリストによる繰り返しが可能となる。
1 2 3 4 |
#!/usr/bin/bash for NUM in one two three; do echo $NUM done |
演習解答13
whileとreadを組み合わせるとファイルを一行づつ表示してくれる。よく使われる例なので丸暗記してしまってもかまわないだろう。今回は「fstab」を表示させてみた。一行づつ表示されているが、連続して表示しているためファイル内容がすべて表示される。
1 2 3 4 5 6 7 |
#!/usr/bin/bash while read LINE; do echo"$LINE" done < /etc/fstab |
演習解答14
関数を利用することで処理を部品化することができる。今回は単純にechoを実行する関数を作成してみる。
1 2 3 4 |
#!/usr/bin/bash function myfunc () { echo hello_world } |
なおfunctionは省略してもかまわない。関数を呼出したい場合は単に関数名をスクリプトに記述すればよい。
引数をうけとる場合は、名前につづけて引数を指定する。書式的には「関数の名前 引数...」となる。今回の例では引数はとっていないので「myfunc」とすればよい。
1 2 3 4 5 |
#!/usr/bin/bash function myfunc () { echo hello_world } myfunc |
まとめ
このページではLinuxシェルスクリプトの演習問題をご紹介してきた。理解度チェックや腕試しに使っていただければ幸いだ。