基礎からのshellscript

1.単純なshellsript

#!/bin/bash

echo hello

2.変数宣言と利用

name="tanaka"
#変数を使用する場合($変数)
echo "$name"
#上記と同じ。変数名の後に何か続く場合は{}で囲む
echo "${name}!"

3.特殊変数

#実行したシェルスクリプト
echo $0
#実行したシェルスクリプトのパラメータ数
echo $#
#実行したシェルのパラメータのパラメータ一覧
echo $@

4.ユーザに入力をうながす

read -p "what your name ? " name
echo "welcome ${name}"

5.配列を使用する

#配列の宣言
city=(tokyo nagoya oosaka kagoshima)
#配列の要素へのアクセス
echo ${city[0]}
echo ${city[1]}
echo ${city[2]}
echo ${city[5]}

#配列の要素の変更
city[2]=sapporo
#配列の末尾に要素追加
city+=(hiroshima shimane)
#配列の全要素へアクセス(要素番号を「@」にする)
echo ${city[@]}

6.if文で条件分岐

read -p "your name?" name

if [ "${name}" = "suzuki" ]; then
  echo "hello suzuki!"
elif [ "${name}" = "tanaka" ]; then
  echo "hello tanaka!"
else 
  echo "who are you ?"
fi

#文字列比較は以下のように記述することもできる([[ ]] で囲む)
#空文字かどうか判定するとき(-zを使用する)
if [[ -z $name ]]; then
  echo "empty..."
#正規表現を使用した判定(=~を使用して比較する)
elif [[ $name =~ ^s  ]]; then
  echo "starts with s"
fi

7.繰り返し処理

#for文を使用した繰り返し
#1~5を出力
for i in {1..5}; do
  echo $i
done

#1~5を出力その2
for ((i=1; i<=5; i++)); do
  echo $i
done

#配列を使用した繰り返し
cities=(tokyo nagoya oosaka))
for city in ${cities[@]}; do
  echo $city
done

#whileを使用した繰り返し
i=0
while ((i < 10 )); do 
  ((i++))
  echo $i
done
#continueとbreakを使ってみる
j = 0
while ((j < 10 )); do
  ((j++))
  if ((j == 4)); then
    continue
  fi
  if ((j == 9)); then
    break
  fi
  echo $j
done

#無限ループ(while :)
while :
do
  read -p "input command" cmd
  if [[ $cmd == "quit" ]]; then
    break
  fi
  echo $cmd
done 

8.whileの応用編~ファイルの中身の各行に対して処理をする~

#cities.txtの中身を「行番号+ 行」として標準出力する
i=1
while read line; do
  echo $i "$line"
  ((i++))
done < cities.txt