Paepoi

Paepoi » ShellScript Tips » ShellScript Tips | 繰り返し文

ShellScript Tips | 繰り返し文

# 最終更新日 2017.01.01

for
シェルスクリプトの for 文は Python 等と同様に整数を使いません。
ISF 区切りの文字列、又は配列をシーケンスと扱ってループします。
continuebreak も利用できます。
#!/bin/sh

# zsh でも直接 for なら展開できます
for bike in YAMAHA HONDA SUZUKI KAWASAKI ; do
    [[ $bike = HONDA ]] && continue
    [[ $bike = KAWASAKI ]] && break
    echo $bike
done

整数を使うことも一応できます。
#!/bin/sh

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

for 文の結果をリダイレクト
#!/bin/sh

# /usr/bin の中身を $HOME に出力するサンプル
# done の後ろに > で for 文の結果をリダイレクト

for name in `ls /usr/bin`; do
    echo $name
done > ~/output.txt

区切り文字の変更(bash)
#!/bin/bash

# $IFS は区切り文字を定義する変数
# デフォルトは スペース、タブ、改行(0xff,0x09,0x0a)

_IFS=$IFS
IFS=,
csv=カンマ,区切りの,テキスト

for s in $csv; do
    echo $s
done

# 元に戻す
IFS=$_IFS

区切り文字の定義(zsh)
#!/bin/zsh

motor='スズキかっこいいカワサキかっこいいヤマハ'

for j in ${(ps.かっこいい.)motor}; do
    echo $j
done

while, until
while は条件が真、until は条件は偽の場合に繰り返す制御文。
条件式は if 文と同様 test コマンドを使う。
#!/bin/sh

buf1=あ
while [[ $buf1 != あああああ ]]; do
    echo $buf1
    buf1+=あ
done

buf2=い
until [[ $buf2 == いいいいい ]]; do
    echo $buf2
    buf2+=い
done

無限ループ
#!/bin/sh

# while true は while : でいい

echo y で終了
while : ; do
    # bash
    read -p '> ' res
    # zsh
    #read res\?'> '
    [[ $res = y ]] && break
done

Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.