tkak's tech blog

This is my technological memo.

Bash Tips

最近、短期間に大量のサーバに設定をいれるという仕事がたんまりきていて、とてもじゃないけど手作業なんてしんどいので、ちまちまと使い捨てスクリプトを書いて作業を楽にしてます。
そんな中『これは使える!』というスニペットを残しておきます。

seqコマンド

seqコマンドは順番で数字を出力するだけなんですが、使い勝手よくてちょくちょく使ってます。

$ seq 3 #1から3までの整数を出力
1
2
3

$ seq 2 5 # 2から5までの整数を出力
2
3
4
5

$ seq 4 2 8 # 4から2ずつ8まで出力
4
6
8

$ seq -w 5 100 # -wをつけると桁の幅を同じにできる
005
006
007
009
010
...
...
100

$ seq -s " " 5 # -sで区切り文字を指定できる
1 2 3 4 5

$ seq -f "hoge%02g.log" 3 # 他の文字列と合わせて出力
hoge01.log
hoge02.log
hoge03.log

$ for i in $(seq 3); do echo "do something"; done
do something
do something
do something

source コマンド

bashでテンプレートエンジンもどきみたいなことをしたい時とかに使います。

#!/bin/sh
string="Hello World!!"
source test.txt

test.txt

cat << EOF
<html>
<head>
This is a test.
</head>
<body>
${string}
</body>
</html>
EOF

list fileの読み込み

リストファイルを一行ずつ読んで何かにしたい時に。

$ while read line do; echo ${line}; done < list.txt

配列に要素を追加する

array=() # 配列定義
array=(${array[@]} "fuga")

文字列置換

サーバをコピーして、中の設定ファイルを書き変えたい時に。

$ sed -i "s/hoge/fuga/g" /etc/hosts

DNSからIPアドレスを取得

$ host `hostname` | cut -d" " -f4

大量のサーバに対して手作業するのには限界があるので、うまくコマンド使い回して作業を効率化して定時で帰りましょうね!(キリッ