1

私の以下は、1行で実行できるようにする必要があるbashスクリプトです

### Setup dump directory ###
BAKRSNROOT=/.snapshots/tmp

#####################################
### ----[ No Editing below ]------###
#####################################
### Default time format ###
TIME_FORMAT='%H_%M_%S%P'

### Make a backup ###
backup_mysql_rsnapshot(){
        local DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
        local db="";
        [ ! -d $BAKRSNROOT ] && ${MKDIR} -p $BAKRSNROOT
        ${RM} -f $BAKRSNROOT/* >/dev/null 2>&1
#       [ $VERBOSE -eq 1 ] && echo "*** Dumping MySQL Database ***"
#       [ $VERBOSE -eq 1 ] && echo -n "Database> "
        for db in $DBS
        do
                local tTime=$(date +"${TIME_FORMAT}")
                local FILE="${BAKRSNROOT}/${db}.${tTime}.gz"
#               [ $VERBOSE -eq 1 ] && echo -n "$db.."
                ${MYSQLDUMP} --single-transaction -u ${MUSER} -h ${MHOST} -p${MPASS} $db | ${GZIP} -9 > $FILE
        done
#               [ $VERBOSE -eq 1 ] && echo ""
#               [ $VERBOSE -eq 1 ] && echo "*** Backup done [ files wrote to $BAKRSNROOT] ***"
}

### Die on demand with message ###
die(){
        echo "$@"
        exit 999
}

私が混乱しているのは、次のように書くことができるかということです:

DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"; for db in $DBS do mysqldump...morecode here

それともそれは不可能ですか?これを1行で実行できる必要があります。

4

2 に答える 2

1

はい、できます。

私の例を見てください:

~$ mysql -uroot -proot -Bse 'show databases'
information_schema
Company
UpdatedStructure
bd9199ce_7ccf_11e1_a561_3860779d10f7_db
checking
checkk
db_nagiosql_v32
demo
june14
mahi
midnms
mysql 

この出力を配列に保存します。

:~$ mydbs="$(mysql -uroot -proot -Bse 'show databases')"  

それは実際に働いています:

:~$ for db in $mydbs; do echo $db;done;
information_schema
Company
UpdatedStructure
bd9199ce_7ccf_11e1_a561_3860779d10f7_db
checking
checkk
db_nagiosql_v32
demo
june14
mahi
midnms
mysql  

あなたの代わりに次のfor db in $mydbs; do echo "$db"; done; ように書くことができます:

for db in $mydbs; do mysqldump -uroot -proot "$db" > "$db.sql" ; done;   

一行で行うには

$ DBs="$(mysql -uroot -proot -Bse 'show databases')" ; for db in $DBs; do echo $db;done;
information_schema
Company
UpdatedStructure
bd9199ce_7ccf_11e1_a561_3860779d10f7_db
checking
checkk
db_nagiosql_v32
demo
june14
mahi
midnms
mysql  

次のようにすることもできます。

:~$ for db in $(mysql -uroot -proot -Bse 'show databases'); do echo $db; done;
于 2012-12-21T07:27:37.223 に答える
0

1 行の for ループの正しい構文は次のとおりです。

for asdf in blah; do something; done

追加のセミコロンに注意してください。

于 2012-12-21T07:27:51.673 に答える