以下Unix shell脚本有什么问题?

时间:2013-11-28 11:51:38

标签: shell unix

我已经输入了这个shell脚本,并在编译时显示错误

echo Enter basic Salary
read bs
if [ $bs -lt 1500 ]
then
 hra= echo ´$bs \* 10 / 100´|bc
fi
gs= echo ´$bs + $hra´|bc
echo $gs

错误是:

(standard_in) 1: illegal character: \302
(standard_in) 1: illegal character: \264
(standard_in) 1: illegal character: \302
(standard_in) 1: illegal character: \264
(standard_in) 1: illegal character: \302
(standard_in) 1: illegal character: \264
(standard_in) 1: illegal character: \302
(standard_in) 1: illegal character: \264
(standard_in) 2: syntax error

2 个答案:

答案 0 :(得分:1)

使用´代替'",有一个问题(或者更确切地说,有4个问题)。

除非急性重音以UTF-8或UTF-16编码

,否则还有另一个字符也会造成麻烦

另一个问题是在作业周围使用空格;这些不会在壳中飞行。作业的任何一方都不得有空格。

echo Enter basic Salary
read bs
if [ "$bs" -lt 1500 ]
then hra=$(echo "$bs * 10 / 100"|bc)
fi
gs=$(echo "$bs + $hra"|bc)
echo $gs

你真的不需要变量gs;你可以写:

echo "$bs + $hra" | bc

请注意,如果bs不小于1500,则会为hra获取一个定义不明确的值(无论发生什么事情,或者如果未设置,则为空白。)

看起来你有UTF-8编码数据。

$ echo "´" | odx
0x0000: C2 B4 0A                                          ...
0x0003:
$ echo "´" | utf8-unicode
0xC2 0xB4 = U+00B4
0x0A = U+000A
$ bc | cat
ibase=16
obase=8
C2
302
B4
264
quit
$

U + 00B4是Unicode中的ACUTE ACCENT。

答案 1 :(得分:0)

错误太多:

  1. 如Jonathan所述,正在使用'代替`。
  2. 在为变量赋值时不要使用空格。
  3. 在将数据分配给变量之前创建数据。
  4. 例如 HRA = echo $bs \* 10 / 100|bc

    此外,如果输入超过1500,则会发出错误。所以你需要用它做点什么。

    例如 echo“输入基本工资” 读bs 如果[$ bs -lt 1500] 然后 HRA = echo $bs \* 10 / 100|bc 其他 HRA = echo $bs \* 5 / 100|bc 科幻 GS = echo $bs + $hra|bc echo $ gs