validation – 验证bash脚本的参数

我是一个新手来做任何bash脚本,但我想出了一个基本的,以帮助自动化的过程中删除一些文件夹,因为他们变得不需要。
#!/bin/bash
rm -rf ~/myfolder1/$1/anotherfolder
rm -rf ~/myfolder2/$1/yetanotherfolder
rm -rf ~/myfolder3/$1/thisisafolder

这是这样引起的:

./myscript.sh <{id-number}>

问题是,如果你忘记键入id-number(如我刚才那样),那么它可能会删除很多你真的不想删除的东西。

有没有办法可以添加任何形式的验证命令行参数?在我的情况下,它是好的检查a)有一个参数,b)它的数字,和c)该文件夹存在;然后继续脚本。

#!/bin/sh
die () {
    echo >&2 "$@"
    exit 1
}

[ "$#" -eq 1 ] || die "1 argument required,$# provided"
echo $1 | grep -E -q '^[0-9]+$' || die "Numeric argument required,$1 provided"

while read dir 
do
    [ -d "$dir" ] || die "Directory $dir does not exist"
    rm -rf "$dir"
done <<EOF
~/myfolder1/$1/anotherfolder 
~/myfolder2/$1/yetanotherfolder 
~/myfolder3/$1/thisisafolder
EOF

编辑:我错过了关于检查目录是否存在的部分,所以我添加了,完成脚本。还讨论了评论中提出的问题;固定正则表达式,从==切换到eq。

这应该是一个便携式,POSIX兼容脚本,据我所知;它不使用任何bashisms,这实际上是重要的,因为/ bin / sh在Ubuntu上实际上是破折号这些天,而不是bash。

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...