Bash

実践して学ぶBash入門


はじめに

本記事では Bash の文法を学ぶために、コードをシンプル、かつコピー&ペーストをして実行できるようにしました。また、実際にコードを実行しなくても、実行方法と実行結果を見ることで、Bash の動きをイメージしやすいようにしました。今後も新しい文法を追加する予定です。


入出力


出力する


  • 出力はechoコマンドで出力する。


output.sh

echo "Hello World!"



実行方法

$ ./output.sh



実行結果

Hello World!



入力する


  • 入力はreadコマンドで入力する。


input.sh

read INPUT

echo "$INPUT"


実行方法

$ ./input.sh

Hello World!


実行結果

Hello World!



変数


変数を定義する


  • 変数名は半角英数字(a-z,A-Z,0-9)とアンダーバー(_)が使える。

  • 変数はダブルクォート"で囲う。

  • 変数のアクセスは$変数名または${変数名}でアクセスする。


var.sh

VAR="Hello World!"

echo $VAR


実行方法

$ ./var.sh



実行結果

Hello World!



特殊変数


引数から入力する

変数
機能

$0
スクリプト名が入る

\$1 ~ $9
1番目の引数を$1、2番目の引数を$2でアクセスする

$#
スクリプトに与えた引数の数が入る

$*
スペース区切りで単語を分割する

"$*"
全部の引数をまとめて1つの文字列として処理する

$@
スペース区切りで単語を処理する

"$@"
全ての引数を個別の単語として処理する


arg.sh

echo $0

echo $1
echo $2
echo $#
echo '--- $* ---'; for P in $*; do echo $P; done
echo '--- "$*" ---'; for P in "$*"; do echo $P; done
echo '--- $@ ---'; for P in $@; do echo $P; done # $* と同じ
echo '--- "$@" ---'; for P in "$@"; do echo $P; done


実行方法

$ ./arg.sh "ab cd" "ef gh"



実行結果

./arg.sh

ab cd
ef gh
2
--- $* ---
ab
cd
ef
gh
--- "$*" ---
ab cd ef gh
--- $@ ---
ab
cd
ef
gh
--- "$@" ---
ab cd
ef gh


環境変数を表示する

変数
内容

$PATH
環境PATHを表示する

$PWD
現在のカレントディレクトリを表示する

$TZ
設定されているタイムゾーンを表示する

$IFS
区切り文字を表示する(デフォルトは半角スペース+タブ+改行)


env.sh

echo $PATH

echo $PWD
echo $TZ
echo $IFS


実行方法

$ ./env.sh



実行結果

/usr/local/bin:/usr/bin

/home/user
Asia/Tokyo
_(半角スペース+タブ+改行)


演算子


四則演算子

演算子
数式
意味

数値1 + 数値2
数値1 + 数値2
加法

数値1 - 数値2
数値1 - 数値2
減法

数値1 * 数値2
数値1 × 数値2
乗法

数値1 / 数値2
数値1 ÷ 数値2
除法


数値比較演算子

演算子
数式
意味

数値1 -eq 数値2
数値1 = 数値2
equal

数値1 -ne 数値2
数値1 ≠ 数値2
not equal

数値1 -gt 数値2
数値1 > 数値2
greater than

数値1 -lt 数値2
数値1 < 数値2
less than

数値1 -ge 数値2
数値1 ≧ 数値2
greater than or equal

数値1 -le 数値2
数値1 ≦ 数値2
less than or equal


文字列比較演算子

演算子
意味

文字列
"文字列"の長さが0より大きければ真

-n 文字列
"文字列"の長さが0より大きければ真

! 文字列
"文字列"の長さが0であれば真

-z 文字列
"文字列"の長さが0であれば真

文字列1 = 文字列2
"文字列1"と"文字列2"が等しければ真

文字列1 != 文字列2
"文字列1"と"文字列2"が等しくなければ真


論理演算子

演算子
意味

! 条件
"条件"が真であれば偽

条件A -a 条件B
"条件A"かつ"条件B"が真であれば真

条件A -o 条件B
"条件A"または"条件B"のどちらかが真であれば真


四則演算


加算をする


add.sh

echo $(($1+$2))



実行方法

$ ./add.sh 20 10



実行結果

30



減算をする


sub.sh

echo $(($1-$2))



実行方法

$ ./sub.sh 20 10



実行結果

10



乗算をする


mul.sh

echo $(($1*$2))



実行方法

$ ./mul.sh 20 10



実行結果

200



除算をする


div.sh

echo $(($1/$2))



実行方法

$ ./div.sh 20 10



実行結果

2



剰余算をする


mod.sh

echo $(($1%$2))



実行方法

$ ./mod.sh 5 2



実行結果

1



if 文


if 文を記述する


if.sh

if [ $1 -gt $2 ]

then
echo "$1 > $2"
elif [ $1 -eq $2 ]
then
echo "$1 = $2"
else
echo "$1 < $2"
fi


実行方法

$ ./if.sh 1 2



実行結果

1 < 2



for 文


条件を指定する


for1.sh

for ((i=0;i<5;i++))

do
echo $i
done


実行方法

$ ./for1.sh



実行結果

0

1
2
3
4


範囲を指定する


for2.sh

for i in {0..4}

do
echo $i
done


実行方法

$ ./for2.sh



実行結果

0

1
2
3
4


配列を指定する


for3.sh

ARRAY=(0 1 2 3 4)

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


実行方法

$ ./for3.sh



実行結果

0

1
2
3
4


リストを指定する


for4.sh

for i in 1 1 2 3 5 8 13

do
echo $i
done


実行方法

$ ./for4.sh



実行結果

1

1
2
3
5
8
13


ファイルを指定する


for5.sh

for i in $(cat number.txt)

do
echo $i
done


number.txt

0

1
2
3
4


実行方法

$ ./for5.sh



実行結果

0

1
2
3
4


引数を指定する


for6.sh

for i

do
echo $i
done


実行方法

$ ./for6.sh 0 1 2 3 4



実行結果

0

1
2
3
4


while 文


while 文を記述する


while.sh

a=0

while [ $a -lt 5 ]
do
echo $a
let a++
done


実行方法

$ ./while.sh



実行結果

0

1
2
3
4


配列


配列を定義する


  • 配列を定義する場合は括弧()で囲い、要素はスペースで区切る。

  • 配列のアクセスは${配列名[要素番号]}でアクセスする。


array.sh

ARRAY=(Hello World !)

echo ${ARRAY[0]}
echo ${ARRAY[1]}
echo ${ARRAY[2]}


実行方法

$ ./array.sh



実行結果

Hello

World
!


コメントアウト


コメントアウトをする


  • コメントアウトは#でコメントアウトする。


comment.sh

# echo "Hello"

echo "World"


実行方法

$ ./comment.sh



実行結果

World



参考サイト

Bash $((算術式)) のすべて

Bash $((算術式)) のすべて - A 基本編

Bash $((算術式)) のすべて - B 罠・バグ回避編

Bash $((算術式)) のすべて - C 応用編

初心者向けシェルスクリプトの基本コマンドの紹介

Bashの便利な構文だがよく忘れてしまうものの備忘録

シェルスクリプト(bash)のif文やwhile文で使う演算子について

bashのfor文のまとめ: 小粋空間

bash でインクリメント