LoginSignup
0
1

More than 5 years have passed since last update.

shellスクリプトではまったところ

Posted at

まとまった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"
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1