検索
連載

シェルスクリプトに挑戦しよう(4)変数の定義と参照“応用力”をつけるためのLinux再入門(24)(2/2 ページ)

シェルスクリプトでは、単にコマンドを実行するだけではなく、条件によって処理を変えたり、繰り返し処理を行ったり、また、通常のコマンドのように引数を受け取って、引数に応じた処理を行ったりすることができます。今回は、シェルスクリプトで「変数」を扱う方法について解説します。

Share
Tweet
LINE
Hatena
前のページへ |       

変数の操作

 変数の一部を使用したり、変数を組み合わせて使用したりできます。

 本稿で紹介しているサンプルは、コマンドラインでも試すことができます。特別書かれていない箇所については、引用符はコマンドライン、シェルスクリプトともに省略可能です。

●変数の一部を使用する

 変数名の一部を使用したい場合は、「${変数名:開始位置:長さ}」のように指定します。なお、先頭は「0」です。

 指定した文字列までを削除したい場合は、「${変数名#文字列}」とします。文字列を後ろから探して削除するならば「${変数名%文字列}」で指定します。文字列の指定にはワイルドカード(*)も使用できます。

 例えば、環境変数「LANG」の、例(1)0文字目から5文字分、例(2)「.」という文字までを削除、例(3)「.」という文字以降を削除するにはそれぞれ次のようにします。なお、操作を指定せず「${変数名}」とした場合は、「$変数名」と同じ意味になります。

#! /bin/bash
echo "$LANG"		#環境変数「LANG」の内容を表示
echo "${LANG:0:5}"	#(1)LANGの先頭から5文字分を表示
echo "${LANG#*.}"	#(2)「.」までを削除
echo "${LANG%.*}"	#(3)「.」以降を削除
▲変数「LANG」の一部を表示する(varpart)

$ chmod +x varpart
$ ./varpart
ja_JP.utf8     ← 変数「LANG」の内容
ja_JP          ← ${LANG:0:5}の結果
utf8           ← ${LANG#*.}の結果
ja_JP          ← ${LANG%.*}の結果
▲実行結果(varpart)

●主な変数の操作
指定方法 操作内容
${変数名:開始位置:長さ} 開始位置から指定した長さ分の文字列を切り出す
${変数名#パターン} パターン部分(前方一致)を削除。#の場合は最短一致、##の場合は最長一致
${変数名##パターン}
${変数名%文字列} パターン部分(後方一致)を削除。%の場合は最短一致、%%の場合は最長一致
${変数名%%文字列}
${変数名:-文字列} 変数の内容を取得。変数がセットされていない場合は指定した文字列を返す
${変数名:=文字列} 変数の内容を取得。変数がセットされていない場合は文字列。変数がセットされて
いない場合は変数に指定した文字列をセットした上で返す
${#変数名} 変数の文字数(配列の場合は要素数)

●変数を連結する

 「echo $変数$変数」のように変数を続けて書くことで、変数の内容をそのまま続けることができます。変数名の部分を明確に表すには「${変数名}」のように、「{〜}」で囲みます。

 以下スクリプトの(1)(5)は、全て同じ結果となります。

#! /bin/bash
str1="100"
str2="200"
echo "$str1$str2"	#(1)
echo "${str1}${str2}"	#(2)
echo "${str1}""${str2}"	#(3)
echo $str1$str2		#(4)
echo ${str1}${str2}	#(5)
▲変数を連結する(concatvar)

$ chmod +x concatvar
$ ./concatvar
100200
100200
100200
100200
100200
▲実行結果(concatvar)

●変数で計算する(exprコマンド)

 変数の値で計算したい場合は「expr」コマンドを使います。

 以下のスクリプトでは、(1)(2)ではそれぞれ「expr 100 + 200」を実行しています。なお、「100」や「+」はそれぞれexprコマンドの引数なので、空白で区切る必要があります。(3)のように空白がないと足し算ではなく、文字列の連結となります。

 計算結果を変数に保存したい場合は、(4)のようにバッククオートを使用します。また、計算結果を判定条件などで使いたい場合は、「let」コマンドも使用できます。

#! /bin/bash
str1="100"
str2="200"
expr "$str1" "+" "$str2"	#(1)
expr $str1 + $str2		#(2)
expr $str1+$str2		#(3)
str3=`expr "$str1" "+" "$str2"`	#(4)
echo "$str3"		#(4)の結果を表示
▲変数で計算する(calcvar)

$ chmod +x calcvar
$ ./calcvar
300
300
100+200
300
▲実行結果(calcvar)

●実数も使用したい場合

 シェルスクリプトの中で計算する場合は、exprコマンドまたはletコマンドを使うのが一般的ですが、どちらも整数しか扱うことができません。

 小数点以下の数まで必要になる場合は、「bc」コマンドを使用します()。

【※】「bc」も制御構文を使ったスクリプト処理が可能なコマンドです。文法はC言語と似ており、bashとは異なります。



#! /bin/bash
str1=10.5
str2=3.2
echo $str1+$str2 | bc
ans=`echo $str1*$str2 | bc`
echo $ans
▲シェルスクリプトの中でbcコマンドを使用する(calcbc)

$ chmod +x calcbc
$ ./calcbc
13.7
33.6
▲実行結果(calcbc)

筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る