6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【シェルスクリプトBash入門②】 基本文法

Last updated at Posted at 2020-03-05

この記事では、《シェルスクリプトの基本文法》について、
業務を通して学習した内容をまとめています。

  • 『変数』の使い方
  • 『条件分岐』と『繰り返し処理』の使い方
  • 『関数』の使い方

こういった内容についてまとめています。

※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。

--- 【シェルスクリプト入門】 ---

変数(文字列)

①: 変数の代入

--- 例題 ---

sample.sh
# !/bin/bash

val="Hello World!!" 

=の両端に半角スペースを入れないよう注意

②: 変数の展開

--- 例題 ---

sample.sh
# !/bin/bash

val="Hello World!!" 

echo "${val}"

""だけでは変数展開されないので注意

--- 実行結果 ---

$ . sample.sh
Hello World!!

変数(数値)

①: 変数の代入

--- 例題 ---

sample.sh
# !/bin/bash

x=10

echo $x
echo $x+1

=の両端に半角スペースを入れないよう注意

--- 実行結果 ---

$ . sample.sh
10
10+1

※計算されていないことに注意

計算するには…

sample.sh
# !/bin/bash

x=10

echo $x
echo $x+1
echo `expr $x + 1`

上記のように・・・

『計算結果』や『コマンドの出力結果』を変数に設定した場合は…

__expr``(バッククォート)__を使用する。

※半角スペースを忘れないよう注意

--- 実行結果 ---

$ . sample.sh
10
10+1
11

四則演算

--- 例題 ---

sample.sh
# !/bin/bash

x=10

echo `expr $x + 1`  # 足し算
echo `expr $x - 1`  # 引き算
echo `expr $x \* 2` # 掛け算
echo `expr $x / 2`  # 割り算

--- 実行結果 ---

$ . sample.sh
11
9
20
5

条件分岐|if文、for文

  1. if文
  2. case文

条件分岐①: if文

--- 例題 ---

sample.sh
# !/bin/sh

str="hello"

if [ ${str} = "hello" ]; then
    echo "${str}"
    echo "Hello!!!"
elif [ ${str} = "world" ]; then
    echo "${str}"
    echo "World!!!"
else
    echo "Hello World!!!"
fi
  • if文は[]内に条件を入れ、thenをつける
  • 複数の条件を扱うときはelifでつなぎ、if同様thenをつける
  • elseの後は何も書かず、条件分岐の終わりはfiで閉じる

--- 実行結果 ---

$ . sample.sh
hello
Hello!!!

↓ if文のオプショについて詳しく知りたい方は、下記を参照してみて下さい。

》【シェルスクリプトBash】 if 文(test文)のオプションまとめ

【おまけ】 シェルスクリプト内で実行したコマンドが正常終了したかを判定

--- 例題 ---

sample.sh
# !/bin/bash

. dummy.sh  # dummy.shを実行

exit_flag=$? # 実行結果を変数に格納

if [ $exit_flag = 0 ]; then
    echo $exit_flag
    echo "dummy.shは正常終了"
else
    echo $exit_flag
    echo "dummy.shは異常終了"
fi

コマンド実行後に$?によって、直前に実行したコマンドのステータスコードが取得できる。

  • 成功(正常終了): 0
  • 失敗(異常終了): 0以外全て(1 〜 255)

--- 実行結果(正常終了) ---

$ . sample.sh
0
dummy.shは正常終了

条件分岐②: case文

--- 例題 ---

sample.sh
# !/bin/sh

str="hello"

case ${str} in
    "hello") echo "Hello" ;;
    "world") echo "World" ;;
    *) echo "hello World!!" ;;
esac
  • caseの後に判定したい変数などを指定し、その後に条件)といった形で記述する
  • *)は多くのプログラミング言語におけるswitch~case文のdefaultに該当する
  • 末尾に;;を付ける

--- 実行結果 ---

$ . sample.sh
Hello

繰り返し処理(ループ)|for文、while文

  1. for文
  2. while文

繰り返し処理①: for文

--- 例題①: 複数の文字列 ---

sample.sh
# !/bin/sh

for str in hello world aaa
do
    echo "${str}"
done

--- 実行結果 ---

$ . sample.sh
hello
world
aaa

--- 例題②: 配列 ---

sample.sh
# !/bin/sh

array=(1 2 3 4 5)

for i in ${array[@]}
do
    echo $i
done

--- 実行結果 ---

$ . sample.sh
1
2
3
4
5

--- 例題③: seq ---

seq 第一引数 第二引数と記述することで・・・

第一引数以上〜第二引数以下の整数を順番にループしてくれる。

for文を使うなら、seqコマンドは覚えておきたい

sample.sh
# !/bin/sh

for i in `seq 1 5`
do
    echo $i
done

--- 実行結果 ---

$ . sample.sh
1
2
3
4
5

繰り返し処理②: while文

--- 例題 ---

sample.sh
# !/bin/sh

i=0
while [ $i -lt 10 ]
do
    echo $i
    i=`expr $i + 1 `
done
オプション 説明
num1 -lt num2 num1 が num2 より小さい__なら__真

--- 実行結果 ---

$ . sample.sh
0
1
2
3
4
5
6
7
8
9

関数 【3パターン】

  1. 基本系
  2. function省略系
  3. 引数を渡す

パターン①: 基本系

--- 例題 ---

sample.sh
# !/bin/bash

function hello() {
    echo "hello"
}

hello # 関数呼び出し

--- 実行結果 ---

$ ./sample.sh
hello

パターン②: function省略系

--- 例題 ---

sample.sh
# !/bin/bash

hello() {
    echo "hello"
}

hello # 関数呼び出し

--- 実行結果 ---

$ . sample.sh
hello

パターン③: 引数を渡す

--- 例題 ---

sample.sh
# !/bin/bash

hello() {
    echo "hello $1 and $2"
}

hello John Alex # 関数呼び出し

--- 実行結果 ---

$ . sample.sh
hello John and Alex↲

【おまけ】 現在の日付・時刻を取得する

今日の日付と現在の時刻が、2020年 3月4日 22時00分00秒だった場合

--- 例題 ---

sample.sh
# !/bin/bash

today1=`date "+%Y%m%d%H%M%S"`
today2=`date "+%Y_%m%d_%H%M%S"`

echo "$today1"
echo "$today2"

--- 実行結果 ---

$ . sample.sh
20200305215333
2020_0305_215333

まとめ・感想

surfing-1.jpg

これからしばらく『シェルスクリプト』を書きそうなので、しっかり基礎を理解していきたい。

今後は…

if文(test文)のオプション

をまとめる予定。

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?