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