Bashテクニック集

Unixシェルかつコマンド言語Bashのテクニック集です。個人的によく使いそうなものだけをピックアップしています。

目次

条件文

if文

# 第一引数をstrに格納
str=$1

if [ $# -ne 1 ]; then
  echo "1st arg is empty!"
  exit
fi

if [[ $str == "aaa" ]]; then
  str="AAA"
elif [[ $str == "bbb" ]]; then
  str="BBB"
else
  str="CCC"
fi

繰り返し

forループ

for ((i = 0; i < 10; i++))
do
  echo $i
done

配列ループ

string="aaa,bbb,ccc"
IFS=', ' read -r -a array <<< "$string"

# loop:
for index in "${!array[@]}"
do
  echo "$index : ${array[index]}"
done

# Output:
#  0 : aaa
#  1 : bbb
#  2 : ccc

文字列操作

空白をTrim

string="   aaa   "
echo ${string//[[:blank:]]/} # "aaa"

文字列分割

str="aaa,   bbb,ccc "

arr=(${str//,/ })
# または:
# IFS=', ' read -r -a arr <<< "$str"

echo ${arr[0]} # "aaa"
echo ${arr[1]} # "bbb"
echo ${arr[2]} # "ccc"

入力受付

echo "何か入力してください:"
read hoge
echo "$hoge"

ファイル操作

ヒアドキュメント

# hoge.txt に直接書き込む
cat << EOS > hoge.txt
  aaa
  bbb
  ccc
EOS

# hoge.txt:
# 
#  aaa
#  bbb
#  ccc
# 

ファイル内の文字置換

echo "HOGE=abc" >> hoge.txt

# hoge.txtファイル内の 'HOGE=.*' な行を置換:
sed -ie "s/^HOGE=.*/HOGE=aaa/g" ./hoge.txt

# hoge.txt: HOGE=*** -> HOGE=aaa

# hoge.txtファイル内の 'HOGE=.*' な行をタイムスタンプで置換:
sed -ie "s/^HOGE=.*/HOGE=$(date +%s)/g" ./hoge.txt

# hoge.txt: HOGE=aaa -> HOGE=12345678

ファイルの先頭に文字列追加

$ echo "world" > hoge.txt

# ファイルの先頭に"hello"追加:
$ sed  -i '1i hello' ./hoge.txt 

$ cat hoge.txt 
hello
world

スリープ

# 10秒スリープ
sleep 10s
# 1分スリープ
sleep 1m
# 1時間スリープ
sleep 1h
# 1日スリープ
sleep 1d

コマンド結果を変数に代入

# lsコマンド結果を変数hogeに代入
hoge=$(ls)
echo "${hoge}"

ランダム

# 1 - 10 の範囲でランダムな数を表示:
echo $(((RANDOM % 10) + 1))

プログレスバー

何らかの処理が進んでいることを示すために #################### (100%) ←こういうプログレスバーを表示します:

for ((i = 1; i <= 10; i++))
do
  bar=$bar'##'
  percent=$((i * 10))
  echo -ne "$bar ($percent%)\r"
  sleep 1
done

echo -ne '\n'
PR:時事ネタチェックの時間節約!
芽萌丸プログラミング部 @programming
プログラミング関連アカウント。Web標準技術を中心に書いていきます。フロントエンドからサーバサイドまで JavaScript だけで済ませたい人たちの集いです。