手元にunixが無いので検証できてませんが、 X=`expr "$PARM" : '\([0-9][0-9]*\)'` if test "$PARM" = "$X" then num=true else num=false fi 最初のexprでは、先頭から数字が続いた部分がXにセットされます。数字以外のものが含まれていれば、元の文字列と不一致になるはずです。 あと、桁数に上限があれば、これのほうがわかりやすいかな。 case "$PARM" in [0-9]) num=true ;; [0-9][0-9]) num=true ;; [0-9][0-9][0-9]) num=true ;; [0-9][0-9][0-9][0-9]) num=true ;; *) num=false ;; esac