mysql innodbログファイルのサイズを提供するbashスクリプトを作成しています。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'"' }
答え1
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"