在bash脚本中区分2和02

Sri*_*ram 2 bash scripting wget command-line-arguments

我有一个bash脚本,它将日期,月份和年份作为单独的参数.使用它,构建一个url,然后用于wget获取内容并将其存储在html文件中(比如t.html).现在,用户可以输入2位数的月/日(如02中而不是2,反之亦然).如何区分上述两种格式并在脚本中对此进行更正?

网址的工作方式如下:
日期:需要输入2位数字.因此,必须提供一个7作为正确构建的URL的07.在这里,我正在寻找一个检查,如果它小于10并且前面没有零,则将日期附加零.因此,在构造url之前,7应该成为日期字段的07.
月份:需要输入2位数字,但是这里的网址会自动在0 <10的情况下附加0.因此,如果用户输入2,则网址形成02,但如果用户输入02,则网址形成002.这里,可能需要附加或删除0.

PS:我知道这个方法后跟url s*c&s,但我只需要使用它.

谢谢,
Sriram

fal*_*tro 6

有点不清楚你要求的是什么.如果您只想剥离一个前导零,那么这将做:

month=${month#0}
Run Code Online (Sandbox Code Playgroud)

这将02变成2,并且12仍然存在12.

如果你需要移除多个零(上面002会变成02),你需要做一些不同的事情,比如使用正则表达式

while [ -z "${month##0*}" ]; do month=${month#0}; done
Run Code Online (Sandbox Code Playgroud)

或者使用正则表达式,比如 sed

month=$(sed -e 's/^0*//'<<<"$month")
Run Code Online (Sandbox Code Playgroud)

HTH

编辑
根据您的编辑; 正如已经建议的那样,使用printf

month=$(printf %02d "$month")
Run Code Online (Sandbox Code Playgroud)

这将2变成02,12仍然如此123.如果你想强制一个两位数字或你没有printf(这是一个内置在bash中的shell,通常也可以使用,所以机会很低),sed可以再次帮助

month=$(sed -e 's/.*\(..\)$/\1/'<<<"00$month")
Run Code Online (Sandbox Code Playgroud)

它将前置两个零(002)并保留最后两个字符(02),同时将空字符串转换00为.这也将a变成0a.想想看,你不需要sed这个

month="00$month"
month="${month:0-2}"
Run Code Online (Sandbox Code Playgroud)

(0-需要消除默认值扩展的歧义)