Bash:如何从数字中提取数字

时间:2016-03-02 12:16:59

标签: bash shell unix

所以我在我的脚本中引入了一个数字,就像这样:

    [StructLayout(LayoutKind.Sequential)]
    public struct FormattedMessage_t
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MaxStrLength)]
        public string Message;

        public string[] ParamStrings;
        public int[] GetParamStrs;
        public int ParamCount;

        public const int MaxStrLength = StrMax;
    }

    public static T[] GetArray<T>(IntPtr aTblPtr, int nRows)
    {
        var entrySize = Marshal.SizeOf(typeof(T));
        IntPtr oneRowPtr = new IntPtr(aTblPtr.ToInt64());
        T[] array = new T[nRows];

        for (int i = 0; i < nRows; i++)
        {
            array[i] = (T)Marshal.PtrToStructure(oneRowPtr, typeof(T));
            oneRowPtr = new IntPtr(oneRowPtr.ToInt64() + entrySize);
        }

        return array;
    }

    private void OnSetFormatMsg(IntPtr formatMsg, int nFormatMsg)
    {
        var array = GetArray<FormattedMessage_t>(formatMsg, nFormatMsg);
        foreach (var msg in array)
        {
            var str = msg.Message;
            // and so on
        }
    }

我希望从该号码中提取每个数字并检查它是否小于7.如下所示:

./script 795

我想知道如何提取每个数字。

1 个答案:

答案 0 :(得分:5)

您可以使用子字符串来提取脚本第一个参数的第一个字符:

if [ ${1:0:1} -lt 7 ]; then
    echo "The first digit is smaller than 7"
fi

要为每个角色执行此操作,您可以使用循环:

for (( i = 0; i < ${#1}; ++i )); do
    if [ ${1:$i:1} -lt 7 ]; then
        echo "Character $i is smaller than 7"
    fi
done

请注意,我已将-le(小于或等于)更改为-lt(小于)以使您的信息正确无误。