shellのTips

初期値設定

引数が設定されていなかったら、指定した初期値を設定して処理を続ける

func(){
  local arg1=${1:-default1}
  echo $arg1
}

変数を指定した場合

$ func test
test

指定していない場合

$ func
default1

文字列から指定した文字を削除する

先頭、もしくは末尾からであれば、sedperlを使うまでもない。
先頭の場合には、「#」末尾の場合には「%」を使う

target="1234567890"

先頭の123を削除

echo ${target#123}

末尾の890を削除

echo ${target%890}

先頭の3文字を削除

echo ${target#???}

末尾の3文字を削除

echo ${target%???}

先頭の4までを削除

echo ${target#*4}

末尾の7までを削除

echo ${target%7*}

ファイル target.txt の各行から先頭の3文字をなくしたものを result.txt に保存

cat target.txt | while read n
do
  echo ${n#???}
done > result.txt

sedの場合

cat target.txt | sed -e 's/^...//' > result.txt

perlの場合

cat target.txt | perl -nlpe 's/^...//' > result.txt

パス区切り文字列の場合

ディレクトリのパスを取得するなら

dirname $filepath

ファイル名だけ取りだすなら

basename $filepath

拡張子を切りとるなら

basename $filepath .txt