晚上好, 我想写一个脚本,说明它的参数是否是一个数字,但是我得到了这个:
a: 4: Syntax error: "(" unexpected (expecting ")")
起初我试过这样:
#!/bin/bash case "$1" in 0x* ) echo hex ;; ''|*[!0-9]*) echo dec ;; * ) echo wtf ;; esac
后来我发现了这一点:
if ! [[ "$yournumber" =~ ^[0-9]+$ ]] ; then exec >&2; echo "error: Not a number"; exit 1 fi
嗯,没有一个有效,我求救!
答案 0 :(得分:2)
我不确定*[!0-9]*
你的意思,但以下似乎对我有用。
#!/bin/bash
shopt -s extglob
case "$1" in
'')
echo missing ;;
0x+([0-9a-fA-F]))
echo hex ;;
+([0-9]))
echo dec ;;
*)
echo wtf ;;
esac
请注意extglob
让我使用更复杂的模式匹配来查找“hex”和“dec”数字。您可以在bash man page。
答案 1 :(得分:0)
以此为基础;
expr >>/dev/null "$i" : '0[xX][0-9a-fA-f][0-9a-fA-F]$' && echo hex;
expr >>/dev/null "$i" : '0[0-7]$' && echo oct;
expr >>/dev/null "$i" : '[0-9][0-9]*$' && echo dec;