読者です 読者をやめる 読者になる 読者になる

GeoJackass

ちゃらんぽらんの絶対領域は、是を頑なに堅持

shell_cheat_sheet

今日、渋谷区にある図書館に行ってきました。 そして、やおらamazonで検索し候補に挙げた本を手に取り、ななめ読みを開始しました。 その中で、気になった3冊の本を借りることにしました。 本を借りた目的は、データの取得を自動化することで、ヒューマンエラーとしての重複や、抜け漏れの類を回避したかったためです。 この記事はほとんど本人の備忘録ですし、あくまでもデータの整形、加工のために、係る作業時に発生しそうなヒューマンエラーを少なく出来ればいいよねと言うものです。

  • confirm echo$SHELL
#!/bin/bash
  • 変数事始 echo "hello world" exit 0は、作法的なもので、異常終了していないことを明示する exit 0
s="hello"
echo $s これはsの値を表示する
echo "$s" これはsの値を表示する
echo "${s}" これはsの値を表示する
echo $s$s これはsの値を2回続けて表示する
echo $s $s これはsの値を2回続けて表示するが、間にスペースが入る
echo '$s' これは$sという文字列が表示される(シングルクォートは、変数を展開しない)

ここで注意するのはイコールの間にスペースを取らないこと

  • 整数を扱う
x=10
echo $x
echo $x+2
  • 整数の計算を行う

  • [ ` ` ] バッククォートは、その中の式を評価する

x = 10
echo `expr $x + 2`
#掛け算はバックスラッシュでエスケープする
echo `expr $x \* 2`
#カッコの中を先に計算させたい場合、パーレンをエスケープする
echo `expr \( $x + 5 \) \* 2`
  • 配列を扱う、配列のindexは0番から始まる
a=(2 4 6 10)
echo $a
#添字を使うときにはカーリーブレースをつける
echo ${a[1]}
#aの要素を全て取得する
echo ${a[@]}
#aの要素数を取得する
echo ${#a[@]}
#配列の2番を10にする
a[2]=10
echo ${a[@]}
#配列に要素を加える
a+=(20 30)
echo ${a[@]}
  • コマンドを実行したもの、これは下記の式を実行する方が分かりやすい
d=(`date`)
echo ${d[@]}
echo ${d[3]}
  • 条件式の評価を行う test式
#正常終了ならば0
#数値の評価を行う
# $? は、直前に行われたコマンドの処理結果
test 1 -eq 1; echo $?
条件式の一覧
  • 整数値を比較する条件式
command means mark
-eq equal =
-ne not equal !=
-gt greater than >
-ge greater than equal >=
-lt less than <
-le less than equal <=


  • ファイルを比較する条式
command words means
-nt newer than 2つのファイルを比較して新しい方
-ot older than 2つのファイルを比較して古い方
-e equal 2つのファイルは等しい
-d directory(dir) ディレクトリーかどうか


  • 以下の式はテストケースになる
test -e hello.sh; echo $?
test -d hello.sh; echo $?
  • 論理式
-a and
-o or
  • sample
x=40
if test $x -gt 60
then
    echo "ok!!"
fi
  • test式はブラケットで括ってもいい
if [ $x -gt 60 ]
then
    echo "ok!!"
else
    echo "soso..."
fi
  • thenは下記書式でも実行される
x=40
if [ $x -gt 60 ]; then
    echo "ok!!"
elif [ $x -gt 40 ]; then
    echo "soso..."
else
    echo "no way..."
fi

case文

  • sample
signal="red"
case $signal in
    "red")
        echo "stop"
        ;;
    "yellow")
        echo "caution"
        ;;
    "green")
        echo "go"
        ;;
    *)
        echo "..."
esac

while

  • sample
i=0
while [ $i -lt 10 ]
do 
    i=`expr $i + 1`
    echo $i
done
  • ちょっと複雑なwhile文 3 の時に、一度スキップする。そして、iが10より大きくなったら終了
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

for文

  • sample
for i in 1 2 3 4 5
do
    echo $i
done
for文で配列を使う
  • sample
a=(1 2 3 4 5)
for i in ${a[@]}
do
    echo $i
done
for文でsequencialな整数値を使う場合
  • sample
for i in `seq 1 100`
do
    echo $i
done