使用bash进行数据库管理:
兼容的答案(第一)...
这是在bash、busybox、dash 和ksh 下测试的!
#!/bin/sh
user=root
pass=Admin
host=localhost
db=HISTORIZATION
fmreq="SELECT ID, UNIX_TIMESTAMP(START_TIME) as START_TIME
FROM TABLE_NEW WHERE ID=%d;"
req="`printf "$fmreq" $@`"
mysql -B -D$db -u$user -p$pass -h$host --column-names -se "$req" | (
tab=`printf "\t"`
read ans
ID="${ans%%$tab*}"
START_TIME="${ans#*$tab}"
date=`date -d @$START_TIME +"%F %T"`
printf "Id : %d\nStart: %s\n" $ID "$date"
)
根据要求:不玩$IFS(但bash)
#!/bin/bash
user=root pass=Admin host=localhost db=HISTORIZATION
fmreq="SELECT ID, START_TIME FROM TABLE_NEW WHERE ID=%d;"
[ -f .mysqlcred ] && . .mysqlcred
printf -v req "$fmreq" $@
read -r ans < <(
mysql -B -D$db -u$user -p$pass -se "$req"
)
array=()
while [ "$ans" != "$last" ];do
last="${ans%%$'\t'*}"
ans="${ans#*$'\t'}"
array+=("$last")
done
printf "Id : %d\nStart: %(%F %T)T\n" "${array[@]}"
declare -p array
可以给:
./myscript 51
Id : 51
Start: 2015-01-01 01:00:00
declare -a array='([0]="51" [1]="1420070400")'
或相同但使用关联数组
#!/bin/bash
user=root pass=Admin host=localhost db=HISTORIZATION
fmreq="SELECT ID, START_TIME FROM TABLE_NEW WHERE ID=%d;"
[ -f .mysqlcred ] && . .mysqlcred
printf -v req "$fmreq" $@
declare -A answer
{
read -r tit
read -r ans
while [ "$ans" != "$last" ];do
last="${ans%%$'\t'*}"
answer[${tit%%$'\t'*}]="$last"
ans="${ans#*$'\t'}"
tit="${tit#*$'\t'}"
done
} < <(
mysql -D$db -u$user -p$pass --column-names -re "$req"
)
printf "Id : %d\nStart: %(%F %T)T\n" ${answer[ID]} ${answer[START_TIME]}
declare -p answer
测试:
./myscript 51
Id : 51
Start: 2015-01-01 01:00:00
declare -A answer='([START_TIME]="1420070400" [ID]="51" )'
但使用 $IFS 可能更简单
#!/bin/bash
user=root pass=Admin host=localhost db=HISTORIZATION
fmreq="SELECT ID, START_TIME FROM TABLE_NEW WHERE ID=%d;"
[ -f .mysqlcred ] && . .mysqlcred
printf -v req "$fmreq" $@
IFS=$'\t' read -a ans < <(
mysql -B -D$db -u$user -p$pass -se "$req"
)
printf "Id : %d\nStart: %(%F %T)T\n" ${ans[@]}
请注意,以这种方式更改 IFS 不会改变脚本的其余部分。
Id : 0
Start: 2015-01-01 01:00:00
或者更强一点,使用关联数组
#!/bin/bash
user=root pass=Admin host=localhost db=HISTORIZATION
fmreq="SELECT ID, UNIX_TIMESTAMP(START_TIME) as START_TIME
FROM TABLE_NEW WHERE ID=%d;"
[ -f .mysqlcred ] && . .mysqlcred
printf -v req "$fmreq" $@
declare -A answer
{
read -r tit
read -r ans
while [ "$ans" != "$last" ];do
last="${ans%%$'\t'*}"
answer[${tit%%$'\t'*}]="$last"
ans="${ans#*$'\t'}"
tit="${tit#*$'\t'}"
done
} < <(
mysql -D$db -u$user -p$pass --column-names -re "$req"
)
printf "Id : %d\nStart: %(%F %T)T\n" ${answer[ID]} ${answer[START_TIME]}
declare -p answer
这可能会呈现如下内容:
./myscript 51
Id : 51
Start: 2015-01-01 01:00:00
declare -A answer='([START_TIME]="1420070400" [ID]="51" )'