shell程序不显示作为输入给出的字符的值?

时间:2013-11-18 14:24:09

标签: shell unix ascii

我正在输入用户的单个字符并尝试打印该字符的ascii值,如果它的值为> = 97且< = 121

这是我的代码,但不起作用。

echo "Enter a character"
read n
if ["'${n}" -ge 97 and "'${n}" -le 121]
then
print "%d","'$n"
fi

错误:

  

ascii.sh:3:ascii.sh:['a:not found

2 个答案:

答案 0 :(得分:3)

[是shell中的命令,又名test命令。

您需要[]周围的空格。

此外,为了比较整数,您需要使用<>


编辑:为了解决问题,你可以说:

read n
asc=$(printf "%d" "'$n")
[[ "$asc" > 97 ]] && [[ "$asc" < 122 ]] && echo $asc

如果您使用的是sh,则可以将最后一行更改为:

[ "$asc" -gt 97 ] && [ "$asc" -le 121 ] && echo $asc

答案 1 :(得分:0)

这样的事情会成功:

#!/bin/sh

min=97
max=121
echo "Enter a character"
read n

value=$(printf "%d" "'$n")
printf "The ASCII character of %s is %d.\n" "$n" "$value"

if [ "${value}" -le $min ] && [ "${value}" -le $max ]
then
   printf "%d not in the range.\n" "$value"
else
   printf "%d in the range.\n" "$value"
fi

我改变的事情:
- printf代替print - ["'${n}" -ge 97 and "'${n}" -le 121]条件需要分成两个块:

   if [ "${n}" -le 97 ] && [ "${n}" -le 121 ]