0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

制御構造

Posted at

bashはプログラミング言語と同じように値による条件分岐や、繰り替え一処理を行うことができる。これを制御構造と呼ぶ。

複合コマンド

シェルスクリプトで制御構造を利用するためには、複合コマンドを利用する、よく使われるのは「if」「for 」「case」「while」の四つの複合コマンド。

if文

if文は条件を評価して、その真偽に応じて処理を分岐するための機能を持つ。

#!/bin/bash

# []の前後にスペースを入れないけれならない
## ["$1" = "hello"]; と書くとエラーになるので注意が必要
# 条件式の後には「;」を入れなければならない、入れないのであれば改行する必要がある
## ["$1" = "hello"] と書くとエラーになるので注意が必要

if[ "$1" = "hello" ]; then
  echo "OK"
else
  echo "NG"
fi

# ※ testコマンドと[]
# [] はコマンドであり条件を引数としてとるコマンド。
# testコマンドは[]と同じ動きをするコマンド

# 下記は等価
if [ "$1" = "hello" ]; then
if test "$1" = "hello"; then

条件に利用される文字列の比較

= 左辺と右辺が等しいか
!= 左辺と右辺が等しくないか
-n 与えられる引数が空文字でないかどうか
-z 与えられる引数がから文字であるか

条件に利用される数字の比較

-eq 左辺と右辺が等しい
-ne 左辺と右辺が等しくない
-lt 左辺が右辺より小さい
-le 左辺が右辺以下
-gt 左辺が右辺より大きい
-ge 左辺が右辺以上

条件を結合するための演算子

条件式1 -a 条件式2 条件式が両方真の場合真
条件式1 -o 条件式2 条件式のどちらかが真の場合真
! 条件 条件の反転
() 条件のグループ化

for文

スペースや、タブで区切られた単語に対して繰り返し処理を行う構文。

# for.sh
for str in aaa bbb ccc
do
  echo $name
done

./for.sh
=> aaa
=> bbb
=> ccc

# 下記で引数を区切って渡しても良い
for name in $@  # (for name in $* でも良い)
do
  echo $str
done

./for.sh aaa bbb ccc

=> aaa
=> bbb
=> ccc

case文

指定された文字列がパターンにマッチするかどうかを判断し、マッチしたパターンに対応する処理を行うための制御構文。

case "$1" in
  *.txt)
    echo "$1 is txt"
    ;;
  *.sh)
    echo "$1 is sh"
    ;;
  *)
    echo "not eq"
    ;;
esac

while文

指定した条件が真である場合、do ~ doneの間の処理を繰り返す制御構文。

# while.sh

i=1
while [ $1 -le 10 ]
do
  echo $i
  i=$((i + 2)) # $(()) という書き方は「算術式展開」という
done

./while.sh

=> 1
=> 3
=> 5
=> 7
=> 9
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?