bash – 杀死命令脚本

我正在研究编写shell脚本作为一个类的先决条件,并希望有一些帮助开始。 我目前正在做一个热身练习,要求我编写一个shell脚本,当执行这个脚本的时候,会杀死我给出的命令的任何当前正在运行的进程。 对于这个练习,我使用'less'命令(所以为了testing我会input'man ps | less')。

然而,由于这是我正在写的第一个真正的脚本(除了传统的“Hello World!”之外,我已经完成了),我有点被困在如何开始。 我GOOGLE了很多,并返回了一些相当混乱的结果。 我知道我需要从一个shebang开始,但是我不知道为什么。 我正在考虑使用“if”语句; 一些东西沿线

if 'less' is running kill 'less' process fi 

但我不确定如何去做。 由于我在这方面令人难以置信,所以我也想确保我正确地编写脚本。 我使用记事本作为文本编辑器,一旦我在那里写了我的脚本,我将它保存到一个目录,我在terminal访问,然后从那里运行,正确吗?

非常感谢您给我的任何build议或资源。 一旦我掌握了编写脚本的基础知识,我肯定可以想出更难的练习。

尝试:

 pgrep less && killall less 

pgrep less了任何名为less进程的进程ID。 如果找到一个进程,则返回true,在这种情况下会触发&&子句。 killall less杀死任何名为less进程。

man pgrepman killall

简单化

这可能会错过练习的重点,但是没有必要测试一个less进程。 赶紧跑:

 killlall less 

如果没有less进程正在运行,那么killall什么都不做。

试试这个简单的片段:

 #!/bin/bash # if one or more processes matching "less" are running # (ps will return 0 which corresponds to true in that case): if ps -C less then # send all processes matching "less" the TERM signal: killall -TERM less fi 

有关可用信号的更多信息,请参见man 7 signal可用的手册页中的表格。

你可以在bash中尝试下面的代码:

 #Tell which interpreter will process the code #!/bin/bash #Creating a variable to hold program name you want to serach and kill #mind no-space between variable name value and equals sign program='less' #use ps to list all process and grep to search for the specific program name # redirect the visible text output to /dev/null(linux black hole) since we don't want to see it on screen ps aux | grep "$program" | grep -v grep > /dev/null #If the given program is found $? will hold 0, since if successfull grep will return 0 if [ $? -eq 0 ]; then #program is running kill it with killall killall -9 "$program" fi