コンテンツにスキップ

bash

シェルオプション

【 set 】コマンド――シェルの設定を確認、変更する:Linux基本コマンドTips(205) - @IT

setや、shebangで#!/bin/bash -uなどでセットする

未定義変数使用時にエラー

-u (nounset)

[zaki@cloud-dev2 sh]$ cat set.sh 
#!/bin/bash -u

echo $hoge
[zaki@cloud-dev2 sh]$ ./set.sh 
./set.sh: 行 3: hoge: 未割り当ての変数です
[zaki@cloud-dev2 sh]$ export hoge=123
[zaki@cloud-dev2 sh]$ ./set.sh 
123

set -* の解除

set -uを解除するにはset +u

算術演算

$ echo $((1 + 3 + 2 + 4 + 3))
13
$ echo $((13 * 2))
26
$ echo $((13 / 3))
4
$ echo $((13 % 3))
1

配列

$ list=("abc" "123" "xyz")
$ echo ${list[1]}
123

制御構文

test/評価

オプション 使用例 説明
-n [ -n string ] 文字列長が非ゼロであればtrue
-z [ -z string ] 文字列長がゼロでればtrue
-e [ -e filename ] ファイルが存在すればtrue
-r [ -r filename ] ファイルの読み取り権限があればtrue
-w [ -w filename ] ファイルの書き込み権限があればtrue
-x [ -x filename ] ファイルの実行権限があればtrue
== [ n -eq 123 ] 数値比較(一致)
!= [ n -ne 200 ] 数値比較(不一致)
-eq [ s == "abc" ] 文字列比較(一致)
-ne [ s != "xyz" ] 文字列比較(不一致)

文字列一致は = も有効。

if

if [ -z $value1 ] || [ -z $value2 ]; then
    echo '$value1 or $value2 is not defined'
elif [ -z $value3 ]; then
    echo '$value3 is not defined'
else
    echo OK
fi

ループ

配列要素をループ処理

#!/bin/bash

list=("abc" "123" "xyz")
for item in ${list[@]}; do
  echo $item
done

ループで参照(インデックス)

インデックスが必要であればこちら。

#!/bin/bash

list=("abc" "123" "xyz")
for i in ${!list[@]}; do
  echo ${list[$i]}
done

実行結果は以下の通り。

abc
123
xyz

nからmまで(seq利用)

#!/bin/bash

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

実行結果は以下

1
2
3

whileで無限ループ

while :
do
  # 処理
done