Check argument exists before proceeding
我使用以下脚本来存档和删除用户帐户。
脚本要求名称列表为$1,但如果第一个参数不存在,我希望立即停止脚本,并通知用户正确的用法。
非常感谢您的建议和任何其他改进!
谢谢,丹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #!/bin/bash PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH DESTDIR='/Volumes/UserStorage/Backups' SRCDIR='/Volumes/UserStorage/Users' LOG=`mktemp -t archive-accounts-XXXXX.log` EMAIL_FROM='[email protected]' EMAIL_TO='[email protected]' EMAIL_SUBJ='Account archiving batch job report' { echo"Batch Begins...`date`" echo"###############" echo"" while IFS= read -r line # If not first argument, script should exit with usage message do echo Starting account $line hdiutil create $DESTDIR/$line-$(date +%d-%m-%y).dmg -srcfolder $SRCDIR/$line RETCODE=$? if [ $RETCODE -eq 0 ]; then STATUS="Success" # rm -rf $SRCDIR/$line else STATUS="FAILED!" fi echo Exit Status: $STATUS echo Finished with account $line echo"" done < $1 echo"###############" echo"Batch complete! `date`" } >> $LOG 2>&1 cat $LOG | mailx -s"$EMAIL_SUBJ" $EMAIL_TO exit 0 |
这里有一个较短的选择:
1 | requiredArg=${1?no argument supplied, exiting...} |
如果没有设置
前导码是脚本的路径(调用时)、错误触发行的编号和未设置参数(变量)的名称;在现有情况下,它可能如下所示:
1 | ./someScript: line 3: 1: no argument supplied, exiting... |
如果您发现自己在多个地方进行检查,那么可能需要定义一个小助手函数,如下所示:
1 2 | # Define helper function that outputs to stderr and exits with code 1. die() { echo"$*" 1>&2; exit 1; } |
然后您可以使用它,如下所示:
1 2 | # Abort, if no arguments were passed. (( $# > 0 )) || die"no argument supplied, exiting..." |
正在添加以下内容:
1 2 3 4 | if (($# == 0)); then echo"no argument supplied, exiting..." exit 1 fi |