Вопрос Хотя помощь цикла в Shell Script [закрыта]


Я новичок в сценариях оболочки, поэтому мне интересно, как использовать Loops в форме Shell Script.

Я знаю, как объявить переменную и использовать цикл while в java

int num = 0;
while(num <= 10)
{
    System.out.println(num)
    num = num + 1
}

Но я не знаю, как объявлять переменные и использовать их в цикле while в Shell Script.


1
2017-10-27 20:22


происхождения


Mm ... почему тег debian? - Braiam
@Braiam Тег можно удалить, это общий вопрос программирования (он также может быть опубликован на SO) - kiri


ответы:


Вы будете намного счастливее, используя for (в соответствии с вашим примером)

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

если ты должен использовать while , рассмотрим следующее

i=0
while [[ $i -le 10 ]]; do
    echo "$i"
    i=$((i+=1))
done

1
2017-10-27 20:49





Существуют различные способы сделать это, но сценарий оболочки, который наиболее точно отражает ваш пример Java, таков:

num=0
while test $num -le 10; do
    echo $num
    num=$((num+1))
done

Более «раковинные» способы достижения этого были бы

printf '%s\n' {0..9}

Но учтите, что {0..9} строительство - это «башизм», который не будет работать в стандартной (POSIX) оболочке.


3
2017-10-27 20:29



Я использовал этот пример, и у меня появилась ошибка. "строка 4: num: команда не найдена. - Schmidty15
О, я должен добавить, когда я запускаю файл fileName.sh, я использую bash fileName.sh. Моя первая строка файла: #! / Bin / sh. Я не уверен, что это имеет значение - Schmidty15
@ user1984712 У вас «команда не найдена», потому что вы добавили пробел между num и = знак. - zwets
Нет, в bash мы бы это сделали: printf '%s\n' {0..9}, - gniourf_gniourf
@gniourf_gniourf На самом деле это выглядит лучше, чем эхо, я добавлю его. - zwets


Еще один простой способ:

num=0
while (($num <= 10)); do
    echo "$num"
    ((num++))
done

Это будет работать в bash, но не в стандартной оболочке POSIX.


0
2017-10-27 21:03





Этот сайт Bash Scripting должен помочь вам, как правило, вам не нужно объявлять переменные перед их использованием:

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html


-2
2017-10-27 20:24



О, дорогой, пожалуйста, не связывайтесь с такими ужасными документами! Этот документ действительно показывает что вы не должны делать а не показывать хорошие практики! - gniourf_gniourf
Что с этим не так? Я просто хотел сказать, что это сработало - Schmidty15
@ user1984712 Что случилось? Разбор вывода ls, отсутствие кавычек, устаревший стиль C-loop, использование названий капитализированных переменных, использование let вместо арифметики Баша, использование [] вместо [[...]] или арифметики bash, ... пожалуйста, просто не читайте этот документ, если вы не хотите писать дерьмовый код и не учиться правильному bash. - gniourf_gniourf
@gniourf_gniourf, если это так плохо, вы должны понизить его. - Braiam
Хм, который не обновлялся с 2000 года. tldp.org/LDP/abs/html лучше? - LiveWireBT