シェルスクリプトを書いていて、よく躓く箇所 備忘録

Shellscriptを書いていて、他のプログラミング言語とは少し表記が異なるため、よくこれどうだったっけとなる箇所を紹介します。

自分用の備忘録ですので、人によって躓く箇所は違うと思います。そこら辺はご理解ください。

変数

シェルスクリプトでは、型宣言せずにいきなり値を代入できます。

しかし、注意点として変数としてシェルスクリプトに認識させる際、頭に$が要ります。

しかし、最初に$は要りません。
i=hello
echo $i

加算(減算)

ある整数型の変数に加算(減算)する場合、他のプログラミング言語なら、1加算する場合、i=i+1i++ができるのですが、シェルスクリプトでは違います。

i=0
while [ $i -lt 10 ];do
    echo $i
    i=$(( i+1 )) # 加算
done
1つ加算する場合、i=$(( i+1 ))というふうに書きます。

コマンド結果を変数に代入

シェルスクリプトの特徴として、コマンドシェルで入力した値を文字列として変数に代入できます。

today_01=`date` #バッククォートで囲む
today_02=$(date) #today_01と同じ
echo $today_01
echo $today_02

実行結果

Thr Jul 1 12:00:00 JST 2021
Thr Jul 1 12:00:00 JST 2021

dateコマンドで出力された日付を変数today_01に代入しています。today_02も同様です。

文字列として出力

変数を文字列に組み込んで出力したいとき、他のプログラミング言語も様々な方法で実行しますが、

シェルスクリプトでは、文字型でなくても何も入れずそのまま文字と組み込めます。
name="Takumi"
age=12

echo "I'm "${name}"."
echo "I'm ${age}years." #ダブルクォーテーションの中に変数を入れても認識してくれる
但し、$変数名を${変数名}として用いることをお勧めします。

なくてもうまく実行できることもありますが、できないこともあります。

str="CDE"
echo "ABC$strFGH

実行結果

ABC

ABCDEFGHと出力してほしかったのですが、ABCのみ出力されました。

この場合、変数名が$strFGHと認識され、そのような変数は定義されていないことから、ABCのみ出力されています。

変数名のあとすぐ文字が来るような場合、シェルに認識させるため${変数名}とする必要があります。

条件分岐

ブロックがthenとfiだったり、[]鍵括弧の中に条件式を入れたり、他のプログラミング言語とは異なります。

if [ 条件式 ];then
    処理
fi

或いは、

if [ 条件式 ]
then
    処理
fi

詳しくはこちらの記事にまとめてあります。

繰り返し

ブロックがdoとdoneだったり、[]鍵括弧の中に条件式を入れたり、他のプログラミング言語とは異なります。

for 文

for i in リスト;do
    処理
done

或いは、

for i in リスト
do
    処理
done

while文

while [ 条件式 ];do
    処理
done

或いは、

while [ 条件式 ]
do
    処理
done

詳しくはこちらの記事にまとめてあります。

配列

配列も他のプログラミング言語とは、また異なります。

vars=("A" "B" "C" )
for var in ${vars[@]}
do
    echo $var
done

実行結果

A
B
C

配列に関してはこちらの記事に詳しく書いてあります。