在继续之前检查参数是否存在

时间:2014-03-24 23:48:32

标签: bash shell

我使用以下脚本存档和删除用户帐户。

脚本需要名称列表为$ 1,但如果第一个参数不存在,我希望脚本立即停止,并告知用户使用正确。

您的建议和任何其他改进最受欢迎!

谢谢,Dan

#!/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='admin@example.com'
EMAIL_TO='admin@example.com'
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

2 个答案:

答案 0 :(得分:3)

这是一个较短的选择:

requiredArg=${1?no argument supplied, exiting...}

如果未设置$1,则?之后的文本将输出到stderr(带前导码 - 见下文),脚本将以代码1退出;如果<{1}} 设置为,则只会将其值分配给变量$1

前导码是脚本的路径(被调用),错误触发行的编号,以及未设置参数(变量)的名称;在这种情况下,它可能看起来像这样:

requiredArg

如果您发现自己在多个地方办理登机手续,可能需要按照以下方式定义小帮手功能:

./someScript: line 3: 1: no argument supplied, exiting...

然后您可以按如下方式使用它:

# Define helper function that outputs to stderr and exits with code 1.
die() { echo "$*" 1>&2; exit 1; }

答案 1 :(得分:0)

添加以下内容有效:

if (($# == 0)); then
  echo "no argument supplied, exiting..."
exit 1
fi