петля bash и возврат (от 10 до 1 и от 1 до 10) - PullRequest
0 голосов
/ 17 декабря 2018

В настоящее время я работаю над небольшим фрагментом скрипта в bash.Как новичок я не могу найти решение небольшой проблемы.Мне нужно сделать хронограф, который уменьшается с каждой итерацией, но когда он равен 0, он возвращается к 10 (10 -> 0, затем 0 -> 10).Я написал небольшую статью, которая в настоящее время не работает.

chrono=5
incremant=-1
 while [ $chrono -ge 0 ];
 do
  echo $chrono
  chrono=$((chrono+$incremant))
     if [ $chrono -eq 1 ];
     then
        [ $incremant=1 ];
     fi
 done

Я знаю, что это действительно простая проблема, но я действительно застрял в ней.Заранее спасибо, хорошего дня.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Не уверен почему вы усложняете работу с ручными циклами, когда в bash встроены идеально хорошие C-подобные циклы:

fn() {
    echo $1
    #printf "%2d * %2d = %3d\n" $chrono $chrono $((chrono * chrono))
}

for ((chrono=10; chrono > 0; chrono--)); do fn $chrono ; done
for ((chrono=1; chrono <= 10; chrono++)); do fn $chrono ; done

Вы можете просто изменить секции циклав зависимости от того, что вам действительно нужно , текущее значение составляет от десяти до одного включительно, а затем от одного до десяти включительно, поэтому дублирует 1.Например, если вам не нужен дубликат, просто измените первую секцию второго цикла на chrono=2.

Вы также можете выполнить произвольно сложные операции со значением с помощьюФункция fn (например, закомментированный бит, который дает вам красиво отформатированный список выражений, дающий квадрат каждого числа, например 10 * 10 = 100).Текущая функция просто отображает значение:

10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
0 голосов
/ 17 декабря 2018

Скрипт:

#!/bin/bash

#Initial value
chrono=10
#Initial increment
increment=-1
#as long as the value of chrono is in the interval [0,10] do
 while [[ "$chrono" -ge 0 && "$chrono" -le 10 ]];
 do
  #print the current value
  echo $chrono
  #change the value of chrono by adding the increment
  chrono=$(( chrono+increment ))
     #when the value of the chrono is at 1, change the sign of the increment to do the rebound
     if [[ "$chrono" -eq 1 ]];
     then
        increment=1
     fi
 done

Вывод:

$ ./chrono.sh 
10
9
8
7
6
5
4
3
2
1
2
3
4
5
6
7
8
9
10

Для просмотра:

https://bash.cyberciti.biz/guide/Perform_arithmetic_operations http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html http://tldp.org/LDP/Bash-Beginners-Guide/html/chap_07.html https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...