bash制御構文

July 30, 2021

分岐

if [ 条件 ] ; then
fi

if [ 条件 ] ; then
else
fi

if [ 条件 ] ; then
elif [ 条件 ] ; then
fi

declare -i i=0
while [ $i -lt 5]; do
#処理
let ++i
done

for 文

declare -i i
for ((i=0; $i < 5 ; ++i)); do
done

for each 文

for field in "${fields[@]}";do
done

if 文をシンプルに

参考

    command ...
    if [ $? -ne 0 ]
    then
    echo ...
    exit 1
    fi
みたいに書くと、コードが見づらいのでなんとかならないかと思っていたら、
    command ... || { echo ... ; exit 1 ; }
こういう風に書けるのか。
Perl の「or die」みたい。ってか Perl のほうが新しいと思うけど。
    command ... || echo ... ; exit 1
のように書くと exit が実行されないので要注意。って bashクックブック に書かれてました。

{ echo … ; exit 1 ;} と最後の「;」を忘れないように。でないと if 文全体がエラーになる。

ループ

for ループの基本

for i in 1 2 3 4 5 6 7 8 9 10; do
  echo $i
done

seq を使った C 風ループ

for i in `seq 1 10`; do
  echo $i
done

seq が使えない場合は,こんなやりかたもある.

for i in `yes ""|cat -n|head -10`; do
  echo $i
done

bash 3 以降だと,echo {1..10} という zsh のような書き方ができるので,次のようなのもあり.

bash 3 以降で使えるループ

for i in {1..10}; do
echo $i
done

ただし,echo {01..10}を展開すると,zsh の場合は,“01 02 03 … 09 10”になるのに対して,bash の場合は,“1 2 3 … 9 10”になる点が違う.


Profile picture

Written by tin-machine 技術関連のメモ Twitter