サーバーサイドエンジニアの技術メモあれこれ

調べたことのメモがき。その他雑記もちょろちょろと。ゆるくやってます。

bashメモ

What is bash

ja.wikipedia.org

メモ

前提

Linuxコマンドを複数組み合わせて同時に実行する、というのがbashスクリプトの基本的な考え方。 なのでbashスクリプトの構成要素であるコマンドの解説もこのページで兼ねることにする。

指定した条件に合致するファイルの有無を判定する

testコマンドを利用する。 [ ]もtest同様の働きをする。ワンショットで確認する際はtestコマンド、シェルスクリプト内で条件分岐をしたい場合は[ ]を使うとよい。

atmarkit.itmedia.co.jp

コマンドの失敗を検知して別のコマンドを実行する

command1 || command2

command1が終了ステータス0以外の時にcommand2が実行される。

ログイン中のユーザのホームディレクトリを出力する

echo $HOME

任意のディレクトリにパスを通す

カレントディレクトリにパスを通す(自分がいるディレクトリの実行可能ファイルは常に検索可能にする)なら以下

export PATH=$PATH:.

※補足 PATHは以下のようになっている。コロン区切りで実行可能ファイルを配備しているディレクトリが指定されてるので、末尾に:.を書き足している

root@test:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

配列

#!/bin/bash
# create array
arr=(hoge fuga bar)

# show specified index
echo ${arr[2]}

# all
echo ${arr[*]}
echo ${arr[@]}

# add single
arr+=("one")
echo ${arr[@]}

# add multiple
arr+=("two" "three")
echo ${arr[*]}

# delete single
unset arr[2]
echo ${arr[@]}

# delete multiple
# nothing

# delete all
unset arr
echo ${arr[*]}

※補足

全要素アクセス時の@と*の違いについては以下を参照。 ダブルクォートで配列を囲った時に違いが出てくる。

「*」の場合は一回でループが終了しています。ダブルクォートで括った配列のインデックスを「*」で指定すると配列全体の一つの値として展開されてしまうからです。「@」の場合は個々の要素がダブルクォートで括られた状態で展開してくれます。

www.task-notes.com

その他参考文献

www.oreilly.co.jp