TOP

自分用シェルスクリプトのメモ

2016-11-30 11:33:32

関数の戻り値に文字列を使う

returnではなくechoを使う

function hoge(){
    message=${1}
    echo ${message}
}

output=`hoge "konnnichi world"`

echo $output

// 出力
konnnichi world

if文

str="aaa"

# 普通のif文
if [ ${str} = "bbb" ]; then
    echo "1:TRUE"
else
    echo "1:FALSE"
fi

# not
if [ ! ${str} = "bbb" ]; then
    echo "2:TRUE"
else
    echo "2:FALSE"
fi

# 条件の連結
if [ ! ${str} = "bbb" ] && [ ! ${str} = "ccc" ]; then
    echo "3:TRUE"
else
    echo "3:FALSE"
fi

# 変数が空の状態をとる場合は"[[ ]]"で囲む ※「単項演算子が予期されます」のエラー回避

str2=""

if [[ ${str2} = "" ]]; then
    echo "4:TRUE"
else
    echo "4:FALSE"
fi

if [[ ! ${str2} = "" ]] && [[ ! ${str2} = "" ]]; then
    echo "5:TRUE"
else
    echo "5:FALSE"
fi

// 出力
1:FALSE
2:TRUE
3:TRUE
4:TRUE
5:FALSE

デリミタで区切って部分取得(cutコマンド)

csv="aaa,bbb,ccc"

# cut -d [デリミタ] -f [フィールド番号]
echo $csv | cut -d , -f 1
echo $csv | cut -d , -f 2
echo $csv | cut -d , -f 2-3

// 出力
aaa
bbb
bbb,ccc

デリミタで区切って配列にする(trコマンド)

csv="aaa,bbb,ccc"

# tr -s [from] [to]
ary=(`echo $csv | tr -s ',' ' '`)

for i in ${ary[@]}; do
    echo $i
done

// 出力
aaa
bbb
ccc

特定の文字列をハイライトするfunction

function highlight(){
    csv=${1}
    pattern=`echo $csv | tr -s ',' '|'`

    txt=`cat ${2} | perl -pe "s/(${pattern})/\e[1;31m$&\e[0m/g"`
    echo -en "${txt}"
}

// 使い方(highlight [カンマ区切りでハイライトキーワード] [対象ファイルのPATH])
highlight aaa,ccc hoge.txt

// 出力
aaabbbcccdddeee