この記事は最終更新日から1年以上が経過しています。
@programming
投稿日 2019/6/27
更新日 2019/10/28 ✏
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'