linux shell for 循环语句

本文分享了两个实用的Shell脚本案例:一个通过for循环创建文件并计数;另一个定时记录系统内存信息,包括RSS、PSS等指标,并输出到指定文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习shell命令,写了一段代码大家可以借鉴下


#! /bin/bash


for ((i=1;i<=5;i++ ))
do
echo "i=$i"
touch $i.txt
sleep 1
done

echo "end!"


脚本为bash!! for循环 学习语言的都熟悉 (())这是要求形式  条件自己写吧 我这写的5次 

do为开始 $i即i变量的值 sleep睡眠时间 

done结束  打印 “end”


下面介绍另外一篇定时记录内存脚本,record.sh

#!/bin/sh

times_left=120

file_name="record_`date+%m%d%H%M`.txt"

while [ $times_left -gt 0 ]

do

    echo"========================================" >> $file_name

   date >> $file_name

   echo "========================================" >>$file_name

   ./mem_stat.sh >> $file_name

   echo "" >> $file_name

   sleep 300

   let times_left=times_left-1

done


内存信息memstat.sh如下:

#!/bin/sh

 

# define function to get memory informationfrom processes.

get_rss()

{

   echo $(($(grep "Rss:" /proc/$1/smaps | sed "s/Rss:*\(.*\) kB/+\1/" | tr '\n

' ' ')))

}

 

get_pss()

{

   echo $(($(grep "Pss:" /proc/$1/smaps | sed "s/Pss:*\(.*\) kB/+\1/" | tr '\n

' ' ')))

}

 

get_pssf()

{

   echo $(($(grep -A 3 / /proc/$1/smaps | grep "Pss:" | sed"s/Pss: *\(.*\) kB/

+\1/" | tr '\n' ' ')))

}

 

# define function to get memory informationfrom process tasks.

get_task_rss()

{

   echo $(($(grep "Rss:" /proc/$1/task/$2/smaps | sed"s/Rss: *\(.*\) kB/+\1/"

| tr '\n' ' ')))

}

 

get_task_pss()

{

   echo $(($(grep "Pss:" /proc/$1/task/$2/smaps | sed"s/Pss: *\(.*\) kB/+\1/"

| tr '\n' ' ')))

}

 

get_task_pssf()

{

   echo $(($(grep -A 3 / /proc/$1/task/$2/smaps | grep "Pss:" |sed "s/Pss: *\(

.*\) kB/+\1/" | tr '\n' ' ')))

}

 

# find all the user space process ids

USER_SPACE_PIDS=$(ls -l /proc/[0-9]*/exe2>/dev/null | grep "-" | sed 's:.*proc/

\([0-9]*\).*:\1:')

 

# clear the cache files.

echo 3 > /proc/sys/vm/drop_caches

 

opera_rss=0

opera_pss=0

opera_pssf=0

opera_pssm=0

 

echo "PID    PPID  RSS    PSS    PSSF  PSSM   COMMAND"

for p in $USER_SPACE_PIDS; do

       if [ -e /proc/$p ]; then

                rss=$(get_rss $p)

                totrss=$(($totrss + $rss))

 

                pss=$(get_pss $p)

                totpss=$(($totpss + $pss))

 

       pssf=$(get_pssf $p)

       totpssf=$(($totpssf + $pssf))

 

       pssm=$(($pss-$pssf))

       totpssm=$(($totpssm + $pssm))

 

                cmd=`cat /proc/$p/comm`

 

                if [[ "$cmd"x ="browserstub"x || "$cmd"x = "opera_omi"x ]]; the

n

                        opera_rss=$(($opera_rss+ $rss))

                        opera_pss=$(($opera_pss+ $pss))

                       opera_pssf=$(($opera_pssf + $pssf))

                        opera_pssm=$(($opera_pssm+ $pssm))

                fi

 

                printf "%6d %6d %6d %6d%6d %6d %s\n" $(cut -d ' ' -f '1,4' /pro

c/$p/stat) $rss $pss $pssf $pssm $cmd

       fi

done

echo "total:"

printf "total:\t \t %6d %6d %6d %6d\n" $totrss $totpss $totpssf $totpssm

 

echo "opera:"

printf "opera:\t \t %6d %6d %6d %6d\n" $opera_rss $opera_pss $opera_pssf $opera

_pssm

 

# for bdpprog tasks

#BDPPROG_PID=$(ls -l /proc/[0-9]*/exe2>/dev/null | grep "bdpprog" | sed 's:.*pr

oc/\([0-9]*\).*:\1:')

 

#BDPPROG_TASK=/proc/${BDPPROG_PID}/task

 

#TASK_PIDS=$(ls ${BDPPROG_TASK})

 

#echo "bdpprog pid=$BDPPROG_PID"

 

# For totally meminfo, such as cachedmemory size

#head -n 7 /proc/meminfo

cat /proc/meminfo

 


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值