Shellscriptを書いていて、他のプログラミング言語とは少し表記が異なるため、よくこれどうだったっけとなる箇所を紹介します。
自分用の備忘録ですので、人によって躓く箇所は違うと思います。そこら辺はご理解ください。
変数
シェルスクリプトでは、型宣言せずにいきなり値を代入できます。
しかし、注意点として変数としてシェルスクリプトに認識させる際、頭に$が要ります。
しかし、最初に$は要りません。i=hello
echo $i
加算(減算)
ある整数型の変数に加算(減算)する場合、他のプログラミング言語なら、1加算する場合、i=i+1
やi++
ができるのですが、シェルスクリプトでは違います。
i=0
while [ $i -lt 10 ];do
echo $i
i=$(( i+1 )) # 加算
done
コマンド結果を変数に代入
シェルスクリプトの特徴として、コマンドシェルで入力した値を文字列として変数に代入できます。
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
配列に関してはこちらの記事に詳しく書いてあります。