используя цикл for и if в скрипте bash

0

Я пытаюсь создать сценарий bash, который печатает нечетные числа от 1-99 моя логика работает в php, но я не могу понять, что будет в коде bash

PHP-код:

for ($i=1; $i<=99; $i++)
{
if ( $i % 2 != 0 )
{
echo "$i <br>";
}
}

как преобразовать его в bash

Я попробовал следующее, но это работает

for ((i=1; i<=99; i++))
do
if [ $i % 2 != 0 ]
then
echo "$i";
fi
done

результат подобен ~ no response on stdout ~

Теги:
for-loop
if-statement

3 ответа

2
Лучший ответ

Проблема здесь в вашем заявлении if. Если вы используете bash, вы можете использовать синтаксис (( )) здесь:

if (( i % 2 != 0 )); then echo "$i"; fi

Вы часто обнаружите, что люди пишут это с помощью &&:

(( i % 2 != 0 )) && echo "$i"

Эта версия наиболее верна оригиналу, поскольку вы увеличиваете счетчик i на один за итерацию, но вы, конечно, можете упростить код для увеличения на 2:

for ((i=1; i<=99; i+=2))

Вы даже можете полностью пропустить петлю:

printf "%s\n" {1..99..2}
1

Нет необходимости использовать условие:

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

Чтобы использовать условие с оператором modulo, используйте арифметическое условие:

 if (( i % 2 != 0 )) ; then 
0

Попробуй это:

#!/bin/bash

for i in {1..99}
do
    j=$(echo "$i % 2" | bc)
    if [[ $j -ne 0 ]]
    then
        echo $i
    fi
done

Ещё вопросы

Сообщество Overcoder
Наверх
Меню