先上脚本
======================================================
proc=xxx // 应用程序名称
pid=`ps | grep $proc | grep -v grep | sed 's/^\s*//' | sed 's/[[:space:]].*//'`
echo $pid
======================================================
详解:
第一行先定义一个应用名变量。
第二行:获取出应用名对应的进程号,这里内容有点多,分步说明
ps 用于查看当前运行的任务。
ps | grep telnet 过滤出 包含应用名的这一行,假设我这里过滤 telnet。
可以看到出现2行,其中下面那行是本条命令的进程,也需要过滤掉。用 grep -v grep 反向过滤,即过滤掉包含grep的行。
ps | grep telnet | grep -v grep
这下只剩下 telnetd这行了。 接下来要取前面的数字691. 思路是这样的,用空字符替换691前面的空格和后面的所有字符。sed命令可以很好的实现这个功能。
sed 's/^\s*//' 这行的意思表示,替换从行头开始的不可见字符(匹配任何空白字符,包括空格、制表符、换页符等等)为空。这样前面的空格就去除了。 关于正则表达式自行补充。
接下来是要去除后面的一长串字符。思路是从空格开始的所有内容。sed中 空格用 [[:space:]] 表示
[[:space:]] :一次空格
.* :除换行之外的所有字符。
sed 's/[[:space:]].*//'
这样进程号就出来了。