[shell]判断一个字符串是否为数字字符串的两种方法(是否为进程号(PID))

50 篇文章 1 订阅
方法一:
在fc4的/etc/init.d/functions文件中,有一句是用来判断字符串是否是pid(当然全部应该是数字啦)
[ -z "${p//[0-9]/}"  -a  -d "proc/$p" ]
这句总的意思是看看$p是不是数字串,要是是的话,再看看是不是有/proc/$p这个目录。如果两个都成立,那么$p就是一个进程号了。
"${p//[0-9]/" 的意思是输出一个字符串,这个字符串是把$p里的数字(0-9)全替换成空(不是空格,就是删掉的意思)后的结果。当然命令执行后$p不变。这样,接着用-z判断输出的结果是否为空字符串,是的话,说明$p就是数字字符串啦。

以上这种方法在fc4的shell(默认应该是bash)下运行没有问题,但是在busybox的shell里却出现:
Bad substitution. 没办法,只好用另外一种方法了。

方法二:

[ "`expr $p + 0`" != ""  -a  -d  "/proc/$p"  ]
这个效果和前面的一样。
注意expr $p + 0左右那两点是在键盘上输出!1的那个键边上那个键产生的,并不是普通的单引号。
若是$p是字符,那么运行expr $p + 0出错, "`expr $p + 0`" != "" 输出的是一个空字符串,否则输出一个非空的字符串(即是相加后的结果)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下命令来杀死名为AliYunDun的进程: ``` #!/bin/bash # 查找名为 AliYunDun 的进程,并杀死它们 pids=$(ps aux | grep '[A]liYunDun' | awk '{print $2}') if [ -z "$pids" ]; then echo "No AliYunDun process found" else echo "Killing AliYunDun process with pids: $pids" kill $pids fi ``` 该脚本的作用是先通过 `ps aux` 命令查找所有包含 `AliYunDun` 字符串进程,然后使用 `awk` 命令提取出进程PID。如果找到了进程,则使用 `kill` 命令将它们杀死。如果没有找到进程,则输出相应的提示信息。注意,为了避免把查找进程的命令也匹配到,我们使用了一个小技巧,在 `grep` 命令中使用 `[A]liYunDun` 替代 `AliYunDun`,这样可以避免把 `grep` 命令也匹配到。 ### 回答2: 编写一个Shell脚本以kill掉名为AliYunDun的进程。 ```shell #!/bin/bash # Shell脚本名称:kill_aliyundun.sh # 查找名为AliYunDun的进程ID process_id=$(pgrep -f AliYunDun) if [ -n "$process_id" ]; then # 存在AliYunDun进程,杀死进程 kill "$process_id" echo "成功杀死进程:AliYunDun (进程ID: $process_id)" else echo "未找到AliYunDun进程" fi ``` 以上脚本使用了`pgrep`命令来查找名为"AliYunDun"的进程ID,并使用`kill`命令杀死该进程。如果找到了进程并成功杀死,将输出相应的成功提示;如果未找到该进程,则输出未找到的提示。 ### 回答3: 您好!以下是一个简单的Shell脚本,用于杀死名为AliYunDun的进程: ```shell #!/bin/bash # 列出所有名为AliYunDun的进程,并将其进程ID保存到一个数组中 pids=($(pgrep AliYunDun)) # 检查数组是否为空 if [ ${#pids[@]} -eq 0 ]; then echo "没有名为AliYunDun的进程在运行。" else # 循环杀死所有进程 for pid in "${pids[@]}"; do echo "正在杀死进程 $pid..." kill $pid done echo "所有名为AliYunDun的进程已成功杀死。" fi ``` 请确保在脚本文件的执行权限,您可以使用以下命令进行设置: ```shell chmod +x script.sh ``` 运行脚本的方式可以是: ```shell ./script.sh ``` 脚本将会列出所有被杀死的进程ID,并显示相应的提示信息。如果没有名为AliYunDun的进程在运行,脚本将会告知您。 希望对您有帮助!如有任何疑问,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值