Mysql
顯示 mysql innodb 日誌文件大小的 bash 腳本
我正在創建 bash 腳本,它為我提供了 mysql innodb 日誌文件的大小(以MB為單位) 。目前我正在以字節為單位獲取它的輸出。請查看以下腳本並幫助以 MB 為單位獲取輸出。
#! /bin/sh a=$(mysql -uroot -proot -e "SHOW VARIABLES" | grep innodb_log_file_size | cut -f2) b=$(echo "$a/$10240" ) echo {"Innodb_log_file_size":"'$b'"' }
在 bash 中,你可以做這樣的事情。
您可以使用
(( ))
來強制執行算術上下文。當涉及到MB 與 MiB的大小時,請參見右側的圖表。
#!/bin/bash psize() { local name="$1" local -i val="$2"; local u="" case "$3" in "B") u="B" ;; "K") u="KiB"; ((val /= 1024 ));; "G") u="GiB"; ((val /= 1024 * 1024 * 1024 ));; # Defaults to MiB *) u="MiB"; ((val /= 1024 * 1024 ));; esac printf "%-22s: %d %s\n" "$name" "$val" "$u" } unit="" # Check if wanted size is given by user if [[ "$1" =~ ^(B|K|M|G)$ ]]; then unit="$1" fi # Use tab as delimiter and read into variables "name" and "value" while IFS=$'\t' read -r name value; do case "$name" in "innodb_log_file_size"|"innodb_log_buffer_size") psize "$name" "$value" "$unit" ;; esac done < <(mysql -uroot -ppass -e "SHOW VARIABLES")
用 grep
如果你想混合 grep 等:
psize() { local -i a=$(mysql -uroot -ppass -e "SHOW VARIABLES" | \ grep innodb_log_file_size | cut -f2) local -i b=0; local u="" case "$1" in "B") u="B" ; b="$a";; "K") u="KiB"; ((b = a / 1024 ));; "G") u="GiB"; ((b = a / 1024 / 1024 / 1024 ));; *) u="MiB"; ((b = a / 1024 / 1024 ));; esac printf "Innodb_log_file_size: %d %s\n" "$b" "$u" } unit="M" if [[ "$1" =~ ^(B|K|M|G)$ ]]; then unit="$1" fi psize "$unit"
您可以通過以下方式使用:
./myscript # Defaults to MiB ./myscript B # Print in bytes ./myscript G # Print in GiB ...
對於參考。
使用 awk:
psize() { awk -v unit="$1" ' BEGIN { if (unit == "") unit="M" switch (unit) { case "B": ratio = 1; break; case "K": ratio = 1024; break; case "G": ratio = 1024 * 1024 * 1024; break; default: ratio = 1024 * 1024; break; } if (unit != "B") unit = unit "iB" } /^innodb_log_file_size\s/ { printf("Log size : %d %s\n", $2 / ratio, unit); } /^innodb_log_buffer_size\s/ { printf("Buffer size: %d %s\n", $2 / ratio, unit); } ' <(mysql -uroot -e "SHOW VARIABLES" -ppass) } psize "$unit"