2013-12-03 1 views
0

Я хочу спросить, знаете ли вы, ребята, как я могу исправить свой сценарий. Я хочу пойти положительно с командой let .. любые идеи?BASH: Приращение переменной с помощью «let»

a=1 
read -p "Enter any number: " COUNTER 
until [ 1 -eq $COUNTER ]; do 
    echo "What is the name for $COUNTER ?" 
    read name1 

    START=$COUNTER 
    END=1 
    for i in $START 
    do 
     echo "$i" 

     echo ${name1}_$i: >> foo.sh 

    done 


    echo COUNTER $COUNTER 
    let a\+=1 

done 
+0

Вы хотите _increment_ a? –

+0

Для того чтобы увеличить, вы можете использовать это: let "a = a + 1" – user2196728

+0

yes, но он не работает ... также когда я пытаюсь увеличить i: let i = i + 1 i get a error – Atlantikdiver

ответ

3

Есть несколько способов, чтобы увеличить переменную в Баш:

# one way 
a=$((a+1)) 

# or even just 
((a++)) 

# using "let" 
let "a=a + 1" 

Отвечая на Ваш комментарий, вы могли бы сделать

${name1}_$((a++)) 

или

${name1}_$((++a)) 

в зависимости от того, вы хотели увеличить переменная до или послеecho Внутренний.

+0

пытается это сделать ... echo $ {name1} _ ((a ++)) >> foo.sh Но: синтаксическая ошибка около неожиданного токена '(' – Atlantikdiver

+0

@ user3057030, 'echo $ {name1} _ $ ((a ++)) >> foo.sh' - использовать' (()) ', если вы хотите обработать арифметическое выражение, но не хотите результата, используйте' $ (()), когда вы хотите получить результат (например, расширение переменной) –

+0

Спасибо тоже! – Atlantikdiver

1

В самом начале вашего скрипта есть декларация:

a=1 

, что, кажется, вызывает проблему. Переменная должна быть объявлена ​​целое число, которое осуществляется двумя способами:

declare -i a 

или

let a=1 

Далее арифметическая может быть сделано с использованием другого let декларации или двойной Паренс обозначения, где префикс $ не всегда имеет для использования как в петле for:

for ((i=0; i<10; ++i)); do 
    echo "i=$i" 
done 
+0

Также спасибо! – Atlantikdiver