気が向いたら書くやつ

気が向いたら何か書きます

bash備忘録

テストを回したりファイル加工したりと、シェルスクリプトを使うことが増えてきたので。

ループ

回数が決まっているときはseqなどを利用する。

# $(command) でコマンドの実行結果に置換
for i in $(seq 10); do
    echo ${i}
done
for i in {1..10}; do
    echo ${i}
done

配列の各要素についてループを回すこともできる。

array=(one two three)
# array[@]で配列全要素を参照、空白文字を考慮してクォートする
for i in "${array[@]}"; do
    echo ${i}
done

ワンライナー

$ for i in $(seq 10) ; do echo ${i} ; done

ファイルの存在を確認

ファイルがあるときのみ追記したり。

if [ -e file.txt ]; then
    echo "Append line" >> file.txt
fi

空のファイルを作成する

echotouchが使える。

echo -n > file.txt # -n で改行しない
touch file.txt

出力を破棄する

"null device"や”bit bucket"などと呼ばれる特殊なデバイスファイル/dev/nullにリダイレクトする。

echo "hello" > /dev/null

整数演算

exprを利用する方法もあるが、算術式展開$(())のほうが高速に動作するらしい。

echo $((1 + 1))
echo $((1 - 2))
echo $((1 * 2))
echo $((1 / 2))   # 小数点以下切り捨て
echo $((3 % 2))   # 剰余
echo $((10 ** 2)) # 階乗

変数も計算できる。

# 九九表の出力
for i in $(seq 9); do
    for j in $(seq 9); do
        printf "%3d" $((i * j))
    done
    echo
done

エラー時に処理を中断

-eオプションをつけてスクリプトを実行するか、スクリプト先頭でset -eとする。


調べたことを並べて書いただけになってしまった。