shell代码
count=0
searchid()
{
count=$(($count+1))
[ $# -eq 0 ] && return
awk -v ppid=$1 '{
if($1==ppid)
{printf"%s %s %s\n",$2,$3,$4;}
}' all | while read nppid a b
do
tmpnum=0
while [ $tmpnum -lt $count ]
do
echo -n " "
tmpnum=$(($tmpnum+1))
done
echo $nppid " " $a " " $b
searchid $nppid
count=$(($count-1))
done
}
ps -Ao ppid,pid,user,cmd | awk '/^ *[0-9]+.*$/{if($1!=$2){printf"%s %s %s %s\n",$1,$2,$3,$4;}}' > all
searchid 0
相关知识点
下面简单描述一下这个脚本中的相关知识点
1:在shell中进行算术运算。
sum=$((1+2))
echo sum # 输出3
sum=$(($sum+3))
echo sum # 输出6
2:在shell中进行逻辑判断。
a=11
b=22
[ $a -lt $b ] # 返回0,表示真。
echo $? # 输出0
3:&&和||的短路原理。
$$中的第一个表达式为真,那么一定会执行第二个表达式;如果第一个表达式为假,那么就不会再执行第二个表达式。
||正好相反。
a=10
b=20
if [ a -lt b ]
then
echo 'a<b'
else
echo 'a>b'
fi
# 输出‘a<b’
a=30
[ $a -lt $b ] && echo 'a<b' || echo 'a>b' #逻辑与上面的if语句相同。输出‘a>b’
4:向awk中传入变量。
var=123
echo | awk -v num=$var '{print num}' # 输出123