2013-03-12 3 views
3

Я пишу сценарий для печати таблицы умножения.Ошибка скрипта Bash

#!/bin/bash 
a=1 
while [ $a -le "10" ] 
do 

tmp=`expr $a * $1` 
printf "%d x %d = %d\n" $1 $a $tmp 
a=`expr $a + 1` 

done 

Дает синтаксическую ошибку.

+2

Как и в стороне, не использовать 'expr' или backticks, если вы не пишете для древней оболочки non-POSIX bourne. Если вы используете bash shebang, не используйте '[' для математики тоже. – ormaaj

ответ

4

побег * следующий

while [ $a -le "10" ] 
do 
    tmp=`expr $a \* $1` 
    printf "%d x %2d = %3d\n" $1 $a $tmp 
    a=`expr $a + 1` 
done 

плз примечание \ * в коде выше.
Здесь bash интерпретирует * как дикий характер. Так что вам нужно, чтобы избежать его буквальных звезд (то есть умножения. Если вы не хотите, чтобы избежать *, то вы можете использовать (()), который выполняет операцию arithematic.

while [ $a -le "10" ] 
do 
    ((tmp = $a * $1)) 
    printf "%d x %2d = %3d\n" $1 $a $tmp 
    ((a++)) 
done 
Смежные вопросы