bash编程 - 最佳实践是否在循环中设置变量



我在bash/shell脚本中具有以下逻辑。从本质上讲,我试图手动传递一个参数,然后从隐藏的文件中传递其他值,例如:

if [[ $# != 1 ]]; then
   echo "./tstscript.sh <IDNUM>" 2>&1
   exit 1
fi
MYKEY=/dev/scripts/.mykey
if [ -f "$MYKEY" ]
then
IFS=';'
declare -a arr=($(< $MYKEY))
# DECLARE VARIABLES
HOSTNM=localhost
PORT=5432
PSQL_HOME=/bin
IDNUM=$1
DBU1=${arr[0]}
export HOSTNM PORT PSQL_HOME IDNUM DBU1 DBU2
$PSQL_HOME/psql -h $HOSTNM -p $PORT -U $DBU1 -v v1=$IDNUM -f t1.sql postgres
else
    echo "Mykey not found"
fi
rt_code=?
exit 1

我在正确的位置声明我的变量吗?我应该在我的if语句中声明它吗?

您的大多数变量都是冗余的。如果您没有在命令行上指定各种参数,则psql已经有一些著名的环境变量。其他人只是硬编码,因此定义它们并不重要。只要您在使用它们之前定义它们,在定义它们的位置实际上并不重要,因为这不是一个很大的脚本。这是一个好兆头,您已经超越了Shell脚本,并且在您开始担心Shell脚本的设计时可以使用更强大的编程语言。

if [[ $# != 1 ]]; then
   echo "./tstscript.sh <IDNUM>" 2>&1
   exit 1
fi
MYKEY=/dev/scripts/.mykey
if ! [ -f "$MYKEY" ]; then
    echo "Mykey not found"
    exit 1
fi
# You only use the first word/line of the file,
# so this should be sufficient.
IFS=";" read -a arr < "$MYKEY"
export PGHOST=localhost
export PGPORT=5432
export PGUSER=${arr[0]}
: ${PSQL_HOME:=/bin}
"$PSQL_HOME"/psql -v v1="$1" -f t1.sql postgres

当您填充/dev/scripts/.mykey时,用form key = value中的行中的行时,您可以源源。

$ cat /dev/scripts/.mykey
DBU1=noober
FIELD2="String with space"
echo "Keep it clean, do not use commands like this echo in the file"

在您的脚本中,您可以通过采购文件

来激活设置
if [ -f "${MYKEY}" ]; then
   . "${MYKEY}"
   # Continue without an array, DBU1 and FIELD2 are set.

相关内容

  • 没有找到相关文章

最新更新