Shell实战之Linux性能统计

connection-summary() {
    netstat -tnp  | grep -v State | awk '{print $4,$6}' | awk -F : '{print $2}' | sort | uniq -c
}

s ()
{
netstat -nt | awk ‘NR>2{print $4,$6}’ | awk -F : ‘{print $2}’ | sort | uniq -c | sort -nr | awk ‘{print $2,$3,$1}’
}

connection_summary(){
    netstat -tn | awk 'NR>2 {print $4,$6}' | awk -F: '{print $2}' |sort | uniq -c | sort -nr | awk '{print $2, $3, $1}'
}

正常模式下的top是在一个界面不断重写刷新原有数据 而且带有交互功能,比如通过上下键滚动数据等操作
批处理模式下,每一次都是输出快照数据,这样就比较方便对数据进行存储和处理

请问老师,课堂作业2,为什么一定要先输出$4和$6呢,感觉后续的操作跟是否打印$4和$6没有关系。但是我尝试去掉这两行,发现输出结果没有进行分组求和了:

明白了,谢谢老师

输出$4 $6之后 后续的待处理内容就变成这两列数据 而不是初始的整行数据了 你可以把后面的语句去掉输出看一下就知道了

get_reward(){
    while true
    data = seq 1 10
    for i in $data:
        if i >3
            data=i
            print$data    
}

lucy()
{
winner={}
while:
while read line
do
if $((RANDOM%6+1>3))
then
echo $line":>3"
winner+=(line)
else
echo $line":<3"
fi
done
if [ ${#{winner[@]}==0 ]:
continue
done
}

lucky () 
{ 
   arr=()
for i in `seq 1 100`
do
    arr[$i]=$(($RANDOM%6+1))
done      
while ((1))
do        
    echo ${!arr[@]} 
    arr_befor=$arr
    for i in ${!arr[@]}
    do       
        ((${arr[$i]} > 3)) || unset arr[$i]
    done
    ((${#arr[@]} == 1)) && break
    ((${#arr[@]} == 0)) && arr=$arr_befor
    for i in ${!arr[@]}
    do 
       arr[$i]=$((RANDOM%6+1))
    done
done
echo ${!arr[@]}
}

请问老师,抽奖这里的给数组赋值,""是不是可有可无呢?

有2个地方讲的时候没有跟上。请帮忙解答下
1、作业2 链接所有的端口和对应的tcp连接状态,找出他们的连接总数
connection_summary() {
    netstat -tn |
        awk 'NR>2{print $4,$6}' |
        awk -F: '{print $2}' |
        sort | uniq -c | sort -nr |
        awk '{print $2"\t"$3"\t"$1}'
}
问题:
(1)awk -F: '{print $2}' 是只取第2列内容么?还是为了做分割用?那上面awk的$4和 $6的值还能取到么?
(2)awk -F: '{print $2}' |
        sort | uniq -c | sort -nr |
        awk '{print $2"\t"$3"\t"$1}'
这一段是在输出什么?$1、$2、$3代表什么
2、作业3,掷骰子random%6+1>=3
问题:
(1)为什么要%6,目的是?输出的范围是?
(2)random%6+1为何又要+1

不行的,加双引号是为了解决有些数组元素是带有空格的情况,比如

[00534760@shell.ceshiren.com ~]$ a=(1 2 "3 4")
[00534760@shell.ceshiren.com ~]$ b=(${a[@]})
[00534760@shell.ceshiren.com ~]$ echo ${#a[@]}
3
[00534760@shell.ceshiren.com ~]$ echo ${#b[@]}
4

all=()

#定义一个集合,把每一轮使用的数据存到这个集合里面

sub=()

#设置轮数

index=0

seq 1 100 | {

#读取所有数据

while read line; do

    all+=($line)

done

echo ${all[@]}

while ((${#all[@]} > 1)); do

    ((index = index + 1))

    sub=("${all[@]}")

    echo "------"

    echo $sub

    echo "++++++"

    echo ${!all[@]}

    for i in "${!all[@]}"; do

        ((RANDOM % 6 + 1 <= 3)) && unset all[$i]

    done

    echo "_+_+_+"

    echo "${all[@]}"

    #复活

    ((${#all[@]} == 0)) && all=("${sub[@]}")

done

}

明白了,这里老师上课强调过,跟这个问题没联系起来,谢谢老师。

perf_get ()
{
    top -b -d 1 -n 5 | grep --color=auto -i --line-buffered yundun$ | awk 'BEGIN{print "CPU MEM"}{cpu+=$9;mem+=$10;print $9,$10}END{print "";print cpu/NR,mem/NR}'
}

按照老师在课上敲的代码,为什么我这里没有读出任何的数?是哪个位置有问题呢?

尽量贴代码吧,all() 是不是应该是all=()

seq 1 100 | { all() while read line; do all+=($line); done; echo ${all[@]}; for i in "${!all[@]}";do ((RANDOM%6+1<3)) && unset all[$i]; done; echo "${all[@]}"; }
代码大致是这样的