我使用以下脚本存档和删除用户帐户。
脚本需要名称列表为$ 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
答案 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