bashの例です。文法的には一般的なプログラミング言語とさほど変わらないのですけど、 細かい注意点が一杯あります。初心者が最初に習った際につまずいた点を全て注意点として書いてみました。
# 複数行のコメントは
# このように
# 書けません。
# 1行コメントはこのように書けます。
echo "Hello, World."
echo "こんにちは。"
# 【注意1】代入演算子の前後には空白を開けないこと。空白を開けるとvar1というコマンドとみなされる
var1=42
var2=35
var3=$((var1+var2))
var4=$((var1-var2))
echo "結果は${var3}と${var4}"
# readonlyはconstみたいなもの
readonly msg="結果は${var3}と${var4}"
echo $msg
# 計算式はletか(())で書ける。(())の場合、式の中に空白を含められる。letは駄目
((var2 += 18))
let var3--
let var4++
echo "${var2} ${var3} ${var4}"
# 配列 初期化時の値は 42 53 76 8
# 【注意2】=の前後は空白を開けないこと
arr1=( "$var1" "$var2" "$var3" "$var4" )
# 分岐と反復
# 配列の全要素を取得する書き方は次のようになる。*や?が展開されないよう二重引用符で囲むといい
# 【注意3】$arr1だけでは要素[0]しか返さないので注意
for v in "${arr1[@]}"; do
# bashのif文はtestコマンド、[]、[[]]が使え、この内bashビルトインの[[]]が最も高速らしい
# 【注意4】[[や]]の前後には空白を開けること
if [[ $v -ge 50 ]]; then
echo "${v}は50以上です。"
elif [[ $v -ge 40 && $v -lt 50 ]]; then
echo "${v}は40以上50未満です。"
else
echo "${v}は50未満です。"
fi
done
# 普通のfor文もある
var5=1
# 配列の長さを取得する構文
len=${#arr1[@]}
for ((i=0; i < $len; i++)){
# 【注意5】配列要素を囲む{}は必須
((var5 *= ${arr1[$i]}))
}
# 整形出力。'を付けるとカンマ区切りにもできる。
# 【注意6】C言語のprintf同様、デフォルトで改行しないので注意
printf "計算結果:[%'15.2f]\n" $var5
str1="Hello,Power,Shell,World"
len=${#str1}
echo "文字列の長さは${len}"
# 大文字に変換。なお小文字は,,
echo ${str1^^}
# 配列をカンマで分割
IFS=',' read -r -a arr2 <<< "$str1"
# 配列変数を表示。【注意7】$arr2だけだと${arr2[0]}しか表示されないので注意
echo ${arr2[@]}
for v in "${arr2[@]}"; do
# 【注意8】正規表現には一重も二重も引用符をつけてはいけない
if [[ $v =~ ^.[opqr] ]]; then # 2文字目がopqrのいずれか
echo "${v}はマッチします。"
else
echo "${v}はマッチしません。"
fi
done
# 現在時刻の取得
# コマンド置換は`` または $()。【注意9】(())ではないので注意
dstr1=$(date +"%Y/%m/%d %H:%M:%S")
# 指定した年月日の値を取得
tm=( 2020 4 26 )
dstr2=$(date -d "${tm[0]}-${tm[1]}-${tm[2]}" +"%Y/%m/%d")
# 【注意10】ヒアドキュメントは標準入力であって文字列リテラルではないので、
# s=<<EOS ... だけでは文字列に値を格納できない。下のようにcatに読ませる必要がある。
s=$(cat << EOS
現在時刻は${dstr1}です。
特定の日付とは…${dstr2}です。
EOS
)
# 改行文字を含む文字列をechoで出力する場合、二重引用符で囲むと改行が正しく出力される。
# 【注意11】囲まない場合は改行文字が削除され単一行に表示されてしまう。
echo "$s"
# また「改行文字を含む文字列」は「改行文字の位置で区切られた配列」ではない。
# 配列として扱うには、下記のように明示的に改行文字で文字列を配列に分割する必要がある。
IFS=$'\n' read -r -d '' -a arr3 <<< "$s"
for v in "${arr3[@]}"; do
echo "[$v]"
done
# end.