SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine Day 2024 Winter

2024年2月1日(木)12:00~17:40

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

その他のスペック一覧

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

採用管理システム<br>主要製品スペック一覧 2023

採用管理システム
主要製品スペック一覧 2023

Linuxを知らない人のためのLPICレベル1【101試験】入門 | 第5回

シェルスクリプトの構文・書き方と実行方法~パーミッションの設定も


  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena

for文による処理の繰り返し

次は、繰り返し処理を記述してみましょう。ここでは例として、次のようなシェルスクリプトを作成します。作成できたら実行権限を付与してください。

sample4.sh
#!/bin/bash
for i in 1 2 3 4 5
do
  touch "sample${i}.txt"
done

実行してから、lsコマンドを実行してみましょう。

sample4.shの実行後にlsコマンドを実行
# ./sample4.sh
# ls sample*.txt
sample1.txt  sample2.txt  sample3.txt  sample4.txt  sample5.txt

5つのファイルが出来上がっています。この結果から分かるように、このシェルスクリプトはtouchコマンドを5回実行するという繰り返し処理を行っています。

繰り返し処理にはfor文を使っています。for文ではまずfor~の行で次の2つを指定します。

  • 繰り返し処理で使用する「変数」(sample4.shではi
  • 変数に代入する「値のリスト」(sample4.shでは1 2 3 4 5の5つ)

そして、doからdoneの間に、繰り返し実行したい処理を記述します。

for文の実行中のようすは次図のとおりです。

for文の実行中のようす
for文の実行中のようす

「値のリスト」から値を1つ取り出し、「変数」に代入します(①)。それから繰り返し処理に入り一度実行します(②)。繰り返し処理の実行が一度終わると、「値のリスト」の次の値を1つ取り出して、「変数」に代入します(③)。そして、繰り返し処理を一度実行します(④)。これを「値のリスト」の全ての値について行います(⑤)。

こうしてtouchコマンドが5回実行され、sample1.txt、sample2.txt、……、sample5.txtという5つのファイルが作成されました。

seqコマンドについて

先ほどのサンプルのように「1から5」を指定するときに1 2 3 4 5とスペース区切りで値を指定しました。しかし、これが「1から100まで」となってくると記述が大変面倒です。

そんなときに便利なのがseqコマンドです。seqはsequence(シークエンス)の先頭3文字で、連続した値を生成するときに便利です。

例えば、次のコマンドを実行すると、1から10までが表示されます。

# seq 10

また、次のようにすると10から50までが表示されます。

# seq 10 50

さらに、次のようにすると10から50までを5区切りで表示します。

# seq 10 5 50

これを利用して先ほどのサンプルを以下のように書き換えてみましょう。

sample4-2.sh
#!/bin/bash
for i in `seq 10 5 50`
do
  touch "sample${i}.txt"
done

コマンドを`(バッククォーテーション)で括ると、その実行結果を取得できます。そのため、seq 10 5 50の部分は「10、15、……、50」のリストになります。

実行後、lsコマンドで見てみると、sample10.txt、sample15.txt、……、sample50.txtというファイル生成されています。

while文による処理の繰り返し

繰り返し処理を行う代表的な文としてもう1つ、while文があります。for文での繰り返し回数は、値のリストに含まれる要素の数によりました。一方、while文は繰り返し回数を指定するのではなく、繰り返しを継続する条件を指定します。この条件を満たしている間は、処理を繰り返し実行します。

次のサンプルを見てください。dodoneの中に繰り返し処理を記述しているのはfor文と同じです。

sample5.sh
#!/bin/bash
VAL=0
while [ ${VAL} -ne 10 ]
do
  VAL=`expr ${VAL} + 1`
  echo ${VAL}
done

実行結果は次のようになります。

sample5.shの実行結果
1
2
3
4
5
6
7
8
9
10

動作のようすは次図のとおりです。

while文の動作のようす
while文の動作のようす

3行目のwhileに続く[ ${VAL} -ne 10 ]が、繰り返しを継続する条件です。条件の指定の仕方はif文と同じで、意味は「変数VALが10ではない」です。

5行目のVAL=`expr ${VAL} + 1`は、変数VALに1追加した値をVALに代入するという処理です。つまり、VALの値は繰り返し処理のたびに1ずつ追加されていきます。そうして繰り返しを継続する条件(VALの値が10ではない)を満たさなくなった時点で、繰り返し処理は終了します。

6行目のecho ${VAL}ではVALの値を表示しています。そのため、繰り返し処理のたびに1、2、……、10と表示されていきました。

readコマンドによる標準入力の取得

readコマンドを使うと、ユーザーが入力した値をシェルスクリプトで読み取ることができます。サンプルで動作を確認してみましょう。

sample6.sh
#!/bin/bash
echo "数値を入力してください:"
read VAL
VAL2=`expr ${VAL} + ${VAL}`;
echo "入力した値は${VAL}です。${VAL}の2倍の値は${VAL2}です。"

これを実行すると、入力待ちの状態になります。数値を入力し[Enter]キーを押下すると、次のように表示されます。

sample6.shの実行結果
# ./sample6.sh
数値を入力してください:
10
入力した値は10です。10の2倍の値は20です。

readコマンドは指定した変数(今回はVAL)に入力された値を代入します。sample6.shでは3行目でそれを足し合わせ、2倍の数値を作って、4行目のechoコマンドで表示しています。

このシェルスクリプトに、while文とif文と組み合わせてみましょう。次のスクリプトは、「-1」を入力したときに処理が終了し、それ以外の値を入力したときには処理を繰り返します。

sample7.sh
#!/bin/bash
VAL=0
while [ ${VAL} -ne -1 ]
do
  echo "数値を入力してください:"
  read VAL
  VAL2=`expr ${VAL} + ${VAL}`;
  if [ ${VAL} -eq -1 ]
  then
    echo "終了します。"
  else
    echo "入力した値は${VAL}です。${VAL}の2倍の値は${VAL2}です。"
  fi
done
sample7.shの実行結果
# ./sample7.sh 
数値を入力してください:
1
入力した値は1です。1の2倍の値は2です。
数値を入力してください:
3
入力した値は3です。3の2倍の値は6です。
数値を入力してください:
9
入力した値は9です。9の2倍の値は18です。
数値を入力してください:
-1
終了します。

次のページ
仕上げの例題

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
Linuxを知らない人のためのLPICレベル1【101試験】入門連載記事一覧

もっと読む

この記事の著者

土橋 直樹(システムアーキテクチュアナレッジ)(ツチハシ ナオキ)

システムアーキテクチュアナレッジにて講師を行う傍ら、IT技術情報ブログ「テックプロジン」や、スイーツ口コミサイト「スイートウォント」など、各種Webサービスの開発・運営に携わる。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事をシェア

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/84 2016/10/04 12:16

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年2月1日(木)12:00~17:40

イベントカレンダーを見る

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング