shellスクリプトではまったところ
まとまったshellscriptを書いて最近はまったところ
忘れることが多いのでメモ
trapは記述した以降の処理しかtrapできない
時間がかかる処理なんだけど、
外からkillされた時でもbackupしてほしいとかいう時に使うんですが、
スクリプトの中にtrapが出る前にkillされたりすると、発動しない
あたり前といえば当たり前。
#!/bin/sh
#処理A
#ここで exit 1としてもtrapに行かない
trap backup 0 1 9
#処理B ここで exit 1とかやるとtrapされる
複数行のものを引数に与える時は”で囲む
これも久々に思い出しったって感じ。
そういえばそーだなーって。
#!/bin/sh
list=`ls -la ./`
func $list #これだと初めの1行しか持って行かれない
func "$list" #全部を処理したい場合はこうする
グローバル、ローカル変数を意識する
負債的な感じのながーいshellscriptとかを分割するんだけど
関数内であっても同じ変数名だとスコープが同じ。
#########
#mainA.sh
#!/bin/sh
. ./func.sh
val="test"
funcA val
echo val #この結果は "A"
#########
#mainB.sh
#!/bin/sh
. ./func.sh
val="test"
funcB val
echo val #この結果は "test"
##########
#func.sh
#!/bin/sh
funcA(){
val=$1 #これだとvalを変更すると全部のvalが変更されてしまう。
val="A"
}
funcB(){
local val=$1 #localをつけるとスコープが変わる
val="B"
}