forループ条件にif文を追加する

forループ条件にif文を追加する

このコードを最小限に抑えるためにforループを作成しようとしています。どんなアイデアがありますか?

hello=5
if [[ -n hello ]]; then 
    for ((n=0; n<hello; n++));
    do
        echo "Running: `ps $user | wc -l` instance(s) ...";
    done
else
    while :
    do
        echo "Running: `ps $user  | wc -l` instance(s) ...";
    done
fi

私は次のことを試しました

for ((n=0;n<hello; [[ -n $hello ]] && n++ || n));

しかし、これはうまくいかないようです。

アイデアは簡単です。 $hello が存在する場合は、指定された繰り返し回数だけ実行し、それ以外の場合は無限に実行します。

ベストアンサー1

2147483647(2 31 - 1) や 999999999999999 など、「十分に大きい」数字を使用して「無制限」を示すことに加えて、-1 または 0 などの値を使用して「無制限」を表すのは比較的一般的です。

-1が「無制限」なので、おそらく次のようなものを選択します。

#!/bin/bash
count=5
[ -n "$1" ] && count=$1
for ((i=0; count == -1 || i < count; i++)); do
    echo "doing something for the ${i}th time"
    sleep .1
done

あるいは、制限が存在することを確認するために別の変数を使用することもできます。

has_limit=0
for ((i=0; ! has_limit || i < count; i++)); do
    ...

しかし、もちろん、ユーザーは2つの値を入力する必要があります。


これに関しては:

for ((n=0;n<hello; [[ -n $hello ]] && n++ || n));

内部はfor (( ... ))算術コンテキストなので、内部で任意のシェルコードを実行することはできません。上記の方法で行うことができますが、少なくともそのようなテストをfor (( ))

おすすめ記事