Bash脚本验证/最佳实践

时间:2012-05-07 13:41:20

标签: bash shell

我正在编写一个Bash脚本来设置一些环境变量,然后启动一个Web服务器。有哪些好的验证检查要添加到脚本中以确保它尽可能是失败证明:

  1 #!/bin/bash
  2 
  3 # Allow checking that variables don't get set to empty strings.
  4 set -o nounset
  5 
  6 readonly qi_redmine_base="/srv/redmine"
  7 
  8 if test "${qi_redmine_base}" -eq "notset"
  9 then
 10 »···echo
 11 fi
 12 
 13 readonly qi_redmine_etc="/etc/redmine/default"
 14 
 15 if test "${qi_redmine_etc}" -eq "notset"
 16 then
 17 »···echo
 18 fi
 19 
 20 
 21 readonly RAILS_ETC="${qi_redmine_etc}"
 22 export RAILS_ETC
 23 
 24 readonly RAILS_LOG="${qi_redmine_base}/log"
 25 export RAILS_LOG
 26 
 27 readonly RAILS_VAR="${qi_redmine_base}"
 28 export RAILS_VAR
 29 
 30 readonly RAILS_CACHE="${qi_redmine_base}/tmp"
 31 export RAILS_CACHE
 32 
 33 export RAILS_ENV=production
 34 export X_DEBIAN_SITEID=default
 35 
 36 
 37 ruby /usr/share/redmine/script/server webrick -e production
 38 if [$? -ne 0]; then
 39   echo "Server failed to start"
 40 fi

非常感谢任何帮助!

格雷格

1 个答案:

答案 0 :(得分:2)

help test 

显示字符串的一些可能的测试机会(长度> 0)和未定义的变量。

甚至还有一个构造来定义默认值:

   ${parameter:-word}
          Use  Default  Values.   If  parameter is unset or null, the expansion of word is
          substituted.  Otherwise, the value of parameter is substituted.
   ${parameter:=word}
          Assign Default Values.  If parameter is unset or null, the expansion of word  is
          assigned  to parameter.  The value of parameter is then substituted.  Positional
          parameters and special parameters may not be assigned to in this way.
   ${parameter:?word}
          Display Error if Null or Unset.  If parameter is null or unset, the expansion of
          word  (or  a  message  to  that effect if word is not present) is written to the
          standard error and the shell, if it is not interactive, exits.   Otherwise,  the
          value of parameter is substituted.
   ${parameter:+word}
          Use  Alternate  Value.   If  parameter is null or unset, nothing is substituted,
          otherwise the expansion of word is substituted.

(引用man bash)。

一般情况下,您需要解决暂停问题,才能完成任务。