Я пытаюсь создать сценарий 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 ~
Проблема здесь в вашем заявлении 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}
Нет необходимости использовать условие:
for i in {1..99..2} ; do
echo $i
done
Чтобы использовать условие с оператором modulo, используйте арифметическое условие:
if (( i % 2 != 0 )) ; then
Попробуй это:
#!/bin/bash
for i in {1..99}
do
j=$(echo "$i % 2" | bc)
if [[ $j -ne 0 ]]
then
echo $i
fi
done