0

说到壳牌,我是菜鸟

这个块应该工作,但它没有

     #!/bin/bash 
     # LOCAL CONFIGURATION SETTINGS - DB_CONFIG is a "fake" associative array
     #----------------------------------------------------------------------------------
     DB_CONFIG=(
        "DB_NAME=>"
        "DB_USER=>root"
        "DB_PASSWORD=>root"
        "DB_HOST=>127.0.0.1"
        "DB_CHARSET=>utf8"
        "DB_COLLATE=>"
     );

     for prop in ${DB_CONFIG[@]} ; do
     key=${prop%%=>*}
     value=${prop##*=>}
     echo $key;
     if[["$key" == "DB_HOST"]] then 
           db_host="$value"

     if[["$key" == "DB_PASSWORD"]] then  
           db_password="$value"

     done;


     # now set the mysql_conn string with the vars above.
     MYSQL_CON="/Applications/MAMP/Library/bin/mysql --host=$db_host -uroot -$db_password"
     exit;
     REPO='http://svn.wp-plugins.org/'

$key == 'DB_HOST'问题是如果我无法弄清楚表达式的语法,如何检查条件。我已经研究了如何做到这一点,但是在我的 mac(运行 bash 3.2)上,如果抱怨语法错误。

4

3 回答 3

1

在此之前,您需要为[and]和 a留出空间;

if [ "$key" == "DB_HOST" ]; then 
      db_host="$value"
fi
于 2012-05-01T19:33:14.217 回答
0

这应该适合你:

DB_CONFIG=(
  "DB_NAME=>"
  "DB_USER=>root"
  "DB_PASSWORD=>root"
  "DB_HOST=>127.0.0.1"
  "DB_CHARSET=>utf8"
  "DB_COLLATE=>"
);  

for prop in ${DB_CONFIG[@]}; do
  key=${prop%%=>*}
  value=${prop##*=>}

  if [[ "$key" == "DB_HOST" ]]; then 
       db_host="$value"
  elif [[ "$key" == "DB_PASSWORD" ]]; then  
       db_password="$value"
  fi  
done

echo "$db_host" "$db_password"

你错过了 after[[和 before的空间]]。您还缺少fis,它对应于 C 或 Java 中的右大括号,并且是 bash 所必需的。此外,if 语句需要一个;after 条件测试。

于 2012-05-01T19:33:10.940 回答
0

这是一个很棒的 bash 脚本快速参考指南

http://linuxconfig.org/Bash_scripting_Tutorial

于 2012-05-01T19:46:53.430 回答