[ 岡山大学 | 理学部 | 地球科学科 | 地球および惑星大気科学研究室 ]

2019年度 大気科学演習1

シェルスクリプト

変数

変数に値を代入するときは,変数と値を「=」でつなぐ. 「=」の右が,左に代入される. 「=」の前後に空白を入れてはいけない.

変数の値を参照するときは,変数の先頭に「$」をつける.

例えば,以下のようなファイル(test.sh)を作成する.

#!/bin/bash
word1=Hello
word2=World
echo $word1 $word2

実行許可を出して,実行する

$ chmod u+x test.sh
$ ./test.sh
Hello World

空白を含む文字列を代入するときは,クォーテーションで括る.

例えば

#!/bin/bash
phrase='Hello World'
echo $phrase

これを実行したら

Hello World

変数をつなげるときは,変数の切れ目がわかるように,変数を{}で括る.

例えば

#!/bin/bash
YEAR=2019
MONTH=10
DAY=24
echo ${YEAR}${MONTH}${DAY}

これを実行したら

20191024

間に文字を挟むこともできる.

例えば

#!/bin/bash
YEAR=2019
MONTH=10
DAY=24
echo ${YEAR}nen${MONTH}gatsu${DAY}nichi

これを実行したら

2019nen10gatsu24nichi

ちなみに,

#!/bin/bash
phrase='Hello World'
echo $phrase

を実行したら

Hello World

であるが,

#!/bin/bash
echo $phrase
phrase='Hello World'

は異なる結果になる. 理由はわかりますよね.

コマンド置換

「$(」と「)」で囲まれた部分は,コマンドとして処理される(ただし末尾の改行は削除される).

#!/bin/bash
files=$(ls)
echo $files

実行してみる. 結果を

$ ls

と比べてみる.

ファイルの数を変数に格納するなら

#!/bin/bash
filenum=$(ls | wc -l)
echo $filenum

実行してみる. 結果を

$ ls | wc -l

と比べてみる.

算術演算

整数の四則演算は,算術式を $(( と )) で囲む.

二重括弧の中は,変数に $ をつけなくてもよい. すなわち,$(( x + y )) と書いたら,変数xと変数yの和が計算される. もちろん $(( $x + $y )) と書いてもよい.

二重括弧を使った四則演算では,小数は使えない. 除算の戻り値は整数(小数点以下切り捨て)になる.

算術比較

数値を比較して,真か偽かを返す.

反復構造(while)

条件が満足されている間,do と done の間を繰り返す.

#!/bin/bash
i=1
while [ $i -le 3 ]; do
  echo $i
  i=$(( i + 1 ))
done

書いたら実行してみる

1
2
3

入れ子にすることもできる.

#!/bin/bash
i=1
while [ $i -le 2 ]; do
  j=1
  while [ $j -le 3 ]; do
    echo $i $j
    j=$(( j + 1 ))
  done
  i=$(( i + 1 ))
done

実行したら

1 1
1 2
1 3
2 1
2 2
2 3

反復構造(for)

与えられた値を代わりばんこに代入して,do と done の間を繰り返す.

#!/bin/bash
for word in apple banana cherry; do
  echo I like $word
done

実行

I like apple
I like banana
I like cherry

こっちも入れ子にすることができる.

#!/bin/bash
for dare in I You ; do
  for fruit in apple banana cherry ; do
    echo $dare like $fruit
  done
done

実行

I like apple
I like banana
I like cherry
You like apple
You like banana
You like cherry




Last Updated: 2019/11/22, Since: 2019/10/24.
This page is generated by Makefile.rd2html.