【发布时间】:2014-11-01 18:23:12
【问题描述】:
您好,下面是我的 bash 脚本。它需要一个源文件和一个令牌文件, 令牌文件包含 servicename:usage 如果找到,我必须在源文件中逐行查找服务名称,然后计算内存使用情况,然后将 -Xmxm 更改为 -Xmx\d{1,3}m。在下面的脚本中,粗体线解释了要做什么很简单 您可以先从脚本的一小部分了解问题
line="Supervisor.childOpts:-Xmx128m" 堆MB=750 line=($(echo $line|sed "s/${-Xmx\d{1,3}m}/$-Xmx{$heapMB}m/g"))那么上面一行有什么问题
#!/bin/bash源文件=$1
令牌文件=$2
如果 [ -z $sourceFile ]
然后
echo "请提供有效的源文件"
0号出口
菲
如果 [ -z $tokenFile ]
然后
echo "请提供有效的令牌文件"
0号出口
菲
#read 令牌文件并使用 : 进行标记以获取 0 索引处的服务名称和 1 处的百分比使用率
声明 arr_token_name
声明 arr_token_usage
计数=0
而读行
做
#here 行包含 :percentage usages
OIFS="$IFS"
IFS=$':'
arr=($line)
IFS="$OIFS"
如果 [ ! -z $line ]
然后
arr_token_name[$count]=${arr[0]}
arr_token_usage[$count]=${arr[1]}
count=`expr $count + 1`
菲
完毕 # 使用所有标记逐行读取源文件
totalMemKB=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo)
echo "总内存 = $totalMemKB"
而读行
做
result_token_search=""
#for j in "${arr_token_name[@]}"
#做
# echo "index=$j"
#完成
计数2=0
对于我在“${arr_token_name[@]}”
做
#here 在行中搜索令牌,如果找到
#calculate memory for this get percent usage from arr_token_usage 然后使用计算 frmula 然后按 1024 计算设备
#然后将 -Xmx\d{1,5}m 替换为 -Xmx
回声“line1=$line”
result_token_search=$(echo $line|grep -P "$i")
如果 [ -n "$result_token_search" ]
然后
percent_usage=${arr_token_usage[$count2]}
让 heapKB=$totalMemKB*$percent_usage/100
让 heapMB=$heapKB/1024
echo "sed 之前=$line"
line=($(echo $line|sed "s/${-Xmx\d{1,3}m}/$-Xmx{$heapMB}m/ g"))
回声“新行=$行”
echo "在 $line 行中找到令牌,令牌 = $i"
菲
result_token_search=""
count2=`expr $count2+1`
cat "$line" >> tmp.txt
完成
完毕
【问题讨论】: