PowerShell Core入門 - 基本コマンドの使い方
- サーバ/ストレージ
サーバ/ストレージ
if制御構文
PowerShellをシェルスクリプトとして使うようになってくると、if制御構文が欠かせなくなる。if制御構文は多くのプログラミング言語に導入されている基本的な構文で、条件に応じて処理を切り分けるために使われる。ifという名前ではないこともあるが、似たような機能は大抵のプログラミング言語で用意されている。
if制御構文の代表的な使い方は、ある条件を評価して、それが真値であればこちらの処理を行い、偽値であればそちらに処理を行う、というものだ。処理を切り分けることでさまざまな状況に対応できるようになる。
if制御構文の書き方
PowerShell Coreにおけるif制御構文は次のように記述する。
PowerShell Coreのif制御構文
if (条件1) {
ステートメントリスト1
} elseif (条件2) {
ステートメントリスト2
} else {
ステートメントリスト3
}
条件1が真値であればステートメントリスト1が実行される。条件1が偽値で条件2が真値の場合にはステートメントリスト2が実行される。条件1が偽値で条件2が偽値の場合にはステートメント3が実行される。
if (条件)の部分は必須だが、elseif (条件)やelseオプショナルなので、指定しなくてもよい。elseは構文の一番最後にひとつしか指定することができないが、elseifに関してはいくつでも追加することができる。この組み合わせによって複数の条件をひとつのif制御構文の流れに中に納めることができる。
if制御構文はネスト構造にすることもできる。if制御構文の中のステートメントリストの中にさらにif制御構文を利用する場合だ。if制御構文で何個もネストを行うと人が理解しにくいシェルスクリプトになってくるので避けた方がよいが、そういった書き方をすることもできる。
if制御構文の条件には比較演算子などを利用する。利用できる比較演算子は次のとおり。
演算子 | 内容 |
---|---|
-eq | 等価 |
-ne | 等価ではない |
-gt | よりも大きい |
-ge | よりも大きいまたは等しい |
-lt | よりは少ない |
-le | よりは少ないまたは等しい |
-like | ワイルドカードパターンに一致する |
-notlike | ワイルドカードパターンに一致しない |
-match | 正規表現パターンに一致する |
-notmatch | 正規表現パターンに一致しない |
-contains | 参照値がコレクションに含まれている |
-notcontains | 参照値がコレクションに含まれていない |
-in | テスト値がコレクションに含まれている |
-notin | テスト値がコレクションに含まれていない |
-is | 同じオブジェクト型である |
-isnot | 同じオブジェクト型ではない |
<や>といった記号ではなくハイフンからはじまる文字列を比較演算子としているプログラミング言語やコマンドはほかにも存在している。UNIXのシェルスクリプトではtestコマンドが条件式の代わりとして機能するが、このコマンドは比較演算子をハイフンからはじめる文字列としてとっており、PowerShellの書き方とよく似ている。
if制御構文のサンプル
if制御構文をelseまたはelseifを使わずに書くと次のようになる。
if制御構文のサンプル1
if ($val -gt 10) {
Write-Host '変数$valは2よりも大きい'
}
この書き方では条件が$val -gt 10となっており、変数$valが10よりも大きい値だった場合に真値となり、{ }ブロックの中に記述されているWrite-Hostコマンドレットが実行され、メッセージが出力される。変数$valがその条件を見たさない場合、そのコマンドレットは実行されない。
このif制御構文にelseを繋げると次のようになる。
if制御構文のサンプル2
if ($val -gt 10) {
Write-Host '変数$valは10よりも大きい'
} else {
Write-Host ('変数$valは10またはこれよりも小さいか' +
'作成されていない、または初期化されていない')
}
この場合、if ($val -gt 10)の条件を満たさなかった場合、else { }の中のWrite-Hostコマンドレットが実行される。このような書き方をした場合、if ()の条件式に当てはまらなかったものはかならずelse { }の側で処理されるようになる。条件によって処理される内容を2分岐させたい場合にはこの書き方を使う。
if (条件式)とelse { }の間にelseif (条件式)を記述すると次のようになる。
if制御構文のサンプル3
if ($val -gt 10) {
Write-Host '変数$valは10よりも大きい'
} elseif ($val -eq 10) {
Write-Host '変数$valは10と同じ'
} else {
Write-Host ('変数$valは10よりも小さいか' +
'作成されていない、または初期化されていない')
}
この書き方では、if (条件式)に当てはまらなかった処理は、次のelseif (条件式)で再び条件判定を受けることになる。このような記述をすることで一続きのif制御構文において複数の分岐を行うことができる。なお、if (条件式)やelseif (条件式)に当てはまった場合にはその後の{ }の中を実行して、if制御構文を抜ける。処理したあとでさらに次のelseif()やelseを評価することはない。このあたりは注意しておきたいポイントだ。
上記サンプルコードを実際に実行すると次のようになる。
こんな感じで処理の切り分けを行うことができる。if制御構文はプログラミング言語としてPowerShell Coreを実行する場合のもっとも基本的な方法だ。PowerShellでシェルスクリプトを組む場合にはまず覚えておく必要がある。
参考資料
※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。
もっと知りたい!こちらもオススメ

【連載】RPA入門 - ツールで学ぶ活用シーン
AIには、ルールベース、機械学習、深層学習(ディープラーニング)の3つのレベルがあり、レベルが上がるに連れてより高度な人工知能を実現しますが、AIのスピンオフという位置付けで、Digital Labor(仮想知的労働者)によるホワイトカラー業務の自動化を実現するRPAが注目されています。
関連リンク
ダウンロードBOXに入れる
記事をダウンロードBOXに追加します。よろしいですか?
ブックマーク
記事をブックマークに追加します。よろしいですか?
会員ログイン
-
2019年2月25日(月)
いまお客様に求められる顧客接点の最適化 コンタクトセンターで実現する事業収益の最大化 -
2019年2月26日(火)
社内のカルチャー(文化)を変えるには - ツール導入だけでは推進できない「働き方改革」 -
2019年2月28日(木) 19:00~20:00
Coke ONを通じた、コカ・コーラの消費者マーケティング -
2019年2月28日(木) 14:30~17:00
サイバーセキュリティの最新情報アップデート ~世界初!データセンター怪談をお披露目!~ -
2019年3月5日(火) 19:00~20:30
第4回 情報セキュリティ事故対応アワード
今注目のIT用語の意味を事典でチェック!