OSSシェルスクリプトに挑戦しよう(15)繰り返し処理の中断:“応用力”をつけるためのLinux再入門(35)今回は、繰り返し処理を中断する際に使用する「break」と「continue」を解説します。繰り返しの処理を中断するには?「for」や「while」のdo〜doneの中で処理を中断したい場合は、「break」または「continue」を使用します。breakの場合、“繰り返し処理全体”を終了します。while文の中に書かれていた場合、whileのブロック全体を終了して、doneの後ろの処理に進みます。対して、continueは“繰り返し内の処理”を中断します。繰り返し処理そのものは続行されるので、繰り返しの最初、つまりwhileの行に戻ります。●中断(1)breakで繰り返し全体を終了する繰り返し処理そのものを終わらせたい場合は、breakを使用します。次のスクリプトでは、readコマンドでキーボードからの入力を読み込み(スクリプト内(1))、case文で読み込んだ内容によって処理を分岐させています。"bye!"#最後にメッセージを表示(6)▲「y」でHello!とあいさつする(sayhello)入力した文字が「y」なら、echoコマンドで「Hello!」と表示します(同(2))。「n」ならば「ok」と表示後、breakで処理を中断します(同(3))。[n]」と表示して処理を続行します(同(4))。入力前のメッセージ、つまりreadコマンドの直前に実行されるechoコマンドでは、メッセージ表示後に改行しないように「-n」オプションを付けています。(6)のメッセージが表示された▲実行結果(sayhello)このスクリプトでは、キーボードで[n]を入力したときにbreakで終了しています。[CTRL]+[D]でreadコマンドに対して入力を終了させた場合、そして[CTRL]+[C]でスクリプトを中断した場合と比較してみましょう。スクリプトが即座に終了したので(6)が実行されていない▲[CTRL]+[C]で終了した場合の実行例(sayhello)●中断(2)continueで繰り返し内の処理を中断するbreakでは処理が中断されてwhile文全体が終了するのに対し、continueは処理を中断して繰り返しの先頭、つまりwhileの行に戻ります。先ほどの「sayhello」スクリプトで、[Enter]だけ入力した場合はメッセージを出さずに再度入力を待つようにしてみましょう。[Enter]だけ入力すると、入力内容が空になるので、case文では「"")」で分岐できます(スクリプト内(1))。"bye!"▲[Enter]のみの場合はcontinue(sayhelloを加工)このスクリプトを実行すると、次のようになります。[Enter]だけ入力すると、すぐwhileに戻ってreadで入力待ちしている様子が分かります。nokbye!▲実行結果(sayhello)for文とwhile文for文もwhile文も、「繰り返しの処理を行う」という点では共通です。for文と同じような繰り返しをwhile文で書くと次のようになります。●引数を順番に処理する引数を順番に処理する場合は「shift」を使って、引数を1つずつ“ずらし”ます。cc」の2つ、2回目のshiftの後は引数が「cc」の1つになります。shiftを繰り返して引数の数が0になったら、条件がFALSEになり、while文が終了します。done」の処理をwhile文で書くと、以下のようになります。]」を指定します((2))。equal”、つまり“以下”という意味です。done」の中では「((i++))」によって、変数iの値を増やします((3))。この「((i++))」が抜けてしまうと、iがずっと1のままとなり、while文を終了できなくなるので注意してください。スクリプトを終了できなくなった場合は、キーボードで[CTRL]+[C]を入力することで強制的に終了させることができます。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。Officeの教材作成およびeラーニング指導を担当。会社などの“PCヘルパー”やピンポイント研修なども行っている。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。