この記事では、《シェルスクリプトの基本文法》について、
僕が学習した内容をまとめています。
- 『変数』の使い方
- 『条件分岐』と『繰り返し処理』の使い方
- 『関数』の使い方
こういった内容についてまとめています。
※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。
--- 【シェルスクリプト入門】 ---
変数(文字列)
①: 変数の代入
--- 例題 ---
sample.sh
#!/bin/bashval="Hello World!!"
※=
の両端に半角スペースを入れないよう注意
②: 変数の展開
--- 例題 ---
sample.sh
#!/bin/bashval="Hello World!!"echo"${val}"
※""
だけでは変数展開されないので注意
--- 実行結果 ---
$ ./sample.sh
Hello World!!
変数(数値)
①: 変数の代入
--- 例題 ---
sample.sh
#!/bin/bashx=10
echo$xecho$x+1
※=
の両端に半角スペースを入れないよう注意
--- 実行結果 ---
$ . sample.sh
10
10+1
※計算されていないことに注意
計算するには…
sample.sh
#!/bin/bashx=10
echo$xecho$x+1
echo`expr$x + 1`
上記のように・・・
『計算結果』や『コマンドの出力結果』を変数に設定した場合は…
expr
と``(バッククォート)を使用する。
※半角スペースを忘れないよう注意
--- 実行結果 ---
$ . sample.sh
10
10+1
11
四則演算
--- 例題 ---
sample.sh
#!/bin/bashx=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文
- if文
- case文
条件分岐①: if文
--- 例題 ---
sample.sh
#!/bin/shstr="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!!!
【おまけ】 シェルスクリプト内で実行したコマンドが正常終了したかを判定
--- 例題 ---
sample.sh
#!/bin/bash. dummy.sh # dummy.shを実行exit_flag=$?if["${exit_flag}"= 0 ];then
echo"${exit_flag}"echo"dummy.shは正常終了"else
echo"dummy.shは異常終了"fi
コマンド実行後に$?
によって、直前に実行したコマンドのステータスコードが取得できる。
- 成功(正常終了): 0
- 失敗(異常終了): 0以外全て(1 〜 255)
--- 実行結果 ---
$ . sample.sh
0
dummy.shは正常終了
条件分岐②: case文
--- 例題 ---
sample.sh
#!/bin/shstr="hello"case$strin"hello")echo"Hello";;"world")echo"World";;*)echo"hello World!!";;esac
- caseの後に判定したい変数などを指定し、その後に
条件)
といった形で記述する *)
は多くのプログラミング言語におけるswitch~case文のdefault
に該当する- 末尾に
;;
を付ける
--- 実行結果 ---
$ . sample.sh
Hello
繰り返し処理(ループ)|for文、while文
- for文
- while文
繰り返し処理①: for文
--- 例題①: 複数の文字列 ---
sample.sh
#!/bin/shfor str in hello world aaa
do
echo"${str}"done
--- 実行結果 ---
$ . sample.sh
hello
world
aaa
--- 例題②: 配列 ---
sample.sh
#!/bin/sharray=(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/shfor i in`seq 1 5`do
echo"${i}"done
--- 実行結果 ---
$ . sample.sh
1
2
3
4
5
繰り返し処理②: while文
--- 例題 ---
sample.sh
#!/bin/shi=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パターン】
- 基本系
- function省略系
- 引数を渡す
パターン①: 基本系
--- 例題 ---
sample.sh
#!/bin/bashfunction 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/bashtoday1=`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
まとめ・感想
これからしばらく『シェルスクリプト』を書きそうなので、しっかり基礎を理解していきたい。
今後は…
if文(test文)のオプション
をまとめる予定。