変数
hoge="Test"
echo $hoge
echo ${hoge}
echo "$hoge"
echo '$hoge'
- =にスペースを入れない
- ダブルクォートは変数が展開される
- シングルクォートは変数が展開されない
数値演算
x=10
echo `expr $x + 2`
echo `expr $x - 2`
echo `expr $x \* 2`
echo `expr $x / 2`
echo `expr \( $x + 5 \) \* 2`
- exprを使う
- バッククォートで囲む
- アスタリスクと括弧はエスケープが必要
配列
a=(2 4 6)
echo ${a[1]}
# 全ての要素を表示
echo ${a[@]}
# 要素の数を表示
echo ${#a[@]}
a[2]=10
# 要素の追加
a+=(20 30)
- 添字の場合かならず中括弧で囲む
- 代入の際は中括弧不要
条件式
-
echo $?
で直前のコマンドの戻り値を確認できる - test の動作確認等に活用可能
数値
num1=1
num2=2
# ==(equal)
test num1 -eq num2
# !=(not equal)
test num1 -ne nume
# >(greater than)
test num1 -gt nume
# >=(greater than or equal)
test num1 -ge nume
# <(less than)
test num1 -lt nume
# <=(less than or equal)
test num1 -le nume
文字列
str1="hoge"
str2="huga"
# =(equal)
test str1 = str2
# !=(not equal)
test str1 != str2
条件分岐
if
x=70
if [ $x -gt 60 ]; then
echo "great!"
elif [ $x -gt 40 ]; then
echo "success"
else
echo "fail"
fi
- []はtestコマンドの代替(半角スペース必要)
case
signal="red"
case $signal in
"red")
echo "stop!"
;;
"yellow")
echo "caution!"
;;
"green")
echo "go!"
;;
*)
echo "..."
;;
esac
- 処理の終了は;;で表す
ループ
while
i=0
while :
do
i=`expr $i + 1`
if [ $i -eq 3 ]; then
continue
fi
if [ $i -gt 10 ]; then
break
fi
echo $i
done
- 処理の継続はcontinue
- ループの離脱はbreak
for
a=(1 2 3 4 5)
for i in ${a[@]}
do
echo $i
done
seq
seqを利用すると1~100のような場合に楽
for i in `seq 1 100`
do
echo $i
done
特殊変数、コマンド引数
# プログラム名
echo $0
# 第1引数
echo $1
# 第2引数
echo $2
# 第10引数
echo ${10}
# 全ての引数
echo $@
# 引数の数
echo $#
# 直前のコマンドの実行結果
echo $?
使い方
./hoge.sh arg1 arg2
対話処理
readを使う
while :
do
read key
echo "you pressed $key"
if [ $key = "end" ]; then
break
fi
done
選択肢形式
selectを使う
select option in HOGE HUGA
do
echo "you pressed $option"
break
done
ファイル読み込み
引数で与えられたファイルを1行ずつ読み込む
while read line
do
echo $line
done < $1
関数
function hello() {
echo $1
local i=1
echo $i
}
# 関数呼び出し
hello hoge
- function は省略可能
- 変数はlocalをつけないとグローバルスコープになる
- 引数は特殊変数で扱う