我是一个新手来做任何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。