我正在输入用户的单个字符并尝试打印该字符的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
答案 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 ]