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

1
2
3
4
5
6
7
8
9
10
11
12
13
`return`ではなく`echo`を使う

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

output=`hoge "konnnichi world"`

echo $output

// 出力
konnnichi world

if文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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コマンド)

1
2
3
4
5
6
7
8
9
10
11
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コマンド)

1
2
3
4
5
6
7
8
9
10
11
12
13
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

1
2
3
4
5
6
7
8
9
10
11
12
13
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

wget:更新があった時だけダウンロードする(-N)

  • 基本形式
1
$ wget -N ftp://hogehoge.com/path/to/hoge.gz
  • シェルで書く場合
1
2
3
4
5
6
7
8
9
10
11
12
13
# 出力先のパス
OUTDIR=/path/to/outdir

# 返り値は「-N」の有無にかかわらず「0」なので、タイムスタンプは自前で取る
BF=`date +%y%m%d%H%M%S -r ${OUTDIR}/hoge.gz`
wget -N -P ${OUTDIR} ftp://hogehoge.com/path/to/hoge.gz
AF=`date +%y%m%d%H%M%S -r ${OUTDIR}/hoge.gz`

if [[ ${BF} < ${AF} ]]; then
echo " ---> ダウンロード前後で変更がありました"
else
echo " ---> ダウンロード前後で変更がありません"
fi