shell脚本笔记--根据进程名关键字kill对应的进程
shell基本概念:
A Unix shell is a command-line interpreter or shell that provides a traditional Unix-like command line user interface. Bash is a Unix shell and command language written by Brian Fox for the GNU Project as a free software replacement for the Bourne shell
从语言角度上来说,shell就是执行在类Unix系统上的命令行语言。而shell脚本就是有一组合法的shell命令来组成。
脚本编写基础语法:
1、流程控制:
if判断格式:
if [ condition1 ] # 此处为判断条件,中括号内部首尾都要有一个空格 then command1 # 此处为该条件下所要执行的命令。多条命令以 换行 或 ; 作为分隔 command2 elif [ condition2 ] then command3 command4 else commandN fi # 注意fi结束
for循环格式:
for var in item1 item2 ... itemN do # 要循环执行的命令,以do开头 command1 command2 ... commandN done # 要循环执行的命令,以done结束
while循环:
while [ condition ] # 要循环执行的命令,以do开头
do command done # 要循环执行的命令,以done结束
判断式的类型:
1)算术判断
描述 | 例子 | 注意事项 |
相等(equal) | [ 2 -eq 2] | 首尾空格 |
不相等(not equal) | [ 2 -nq 3 ] | |
大于(greater than) | [ 2 -gt 1 ] | |
大于等于(greater equal) | [ 2 -ge 1 ] | |
小于(less than) | [ 3 -lt 5 ] | |
小于等于(less equal) | [ 3 -le 2 ] |
判断式不用[]的情况 | 例子 |
(())也可表示算术比较 | ((10>=8)) |
2)字符串判断
描述 | 例子 | |
如果两字符串相同,则结果为真 | [ string1 = string2 ] | |
如果两字符串不相同,则结果为真 | [ string1 != string2 ] | |
如果字符串不是空,则结果为真 | [ -n "$var" ] | |
如果字符串是空,则结果为真 | [ -z "$var" ] | |
表达式中*表示0或者多个字符 | [[ "xxxx" == x* ]] | |
在表达式中?表⽰单个字符 | [[ xxx == x?? ]] | |
在引用变量的时候要记得加双引号[ -z "$a"] 否则当a未定义时会语法报错 |
3)逻辑判断
描述 | 操作符 | 例子 | 注意事项 |
逻辑与(and) | -a | [ 2 -ge 3 -a 1 -le 2 ] | 也可用&&表示 [[ 2 -ge 1 && 3 -ge 4 ]];echo $? |
非 | ! | [ ! 2 -ge 1 ];echo $? | 该例子返回1 |
逻辑或(or) | -o | [ 2 -ge 1 -o 3 -ge 4 ];echo $? | 也可用||表示 [[ 2 -ge 1 || 3 -ge 4 ]];echo $? |
4)shell内置判断
描述 | 操作符 | 例子 |
如果文件(目录)存在(exist),则结果为真 | -e file | [ -e my ];echo $? |
如果文件是一个目录,则结果为真 | -d file | for f in *;do echo $f;if [ -d $f ];then break;fi;done |
如果文件是一个普通文件,则结果为真 | -f file | |
如果文件可读,则结果为真 | -r file | |
如果文件的长度不为0,则结果为真 | -s file | |
如果文件可写,则结果为真 | -w file | |
如果文件可执行,则结果为真 | -x file | |
[[]]是[]的扩展语法,在老的sh中并不⽀持。推荐用[] |
调用shell脚本的方法:
1、直接输入脚本所在路径进行调用;
前提:
1)脚本第一行添加 #!/bin/bash ,来告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
2)使用chmod +x 文件路径 给使用者赋予执行该脚本的权限
2、直接运行解释器,后面加上 shell 脚本的文件名为参数;
e.g. sh test.sh
调用shell脚本时传参:
1、在脚本路径后,输入参数
2、多个参数以空格分隔
3、在脚本内部,$0表示获取该脚本名,$1表示获取调用脚本时传的第一个参数 $2表示调用脚本时传的第二个参数。。以此类推
e.g. sh test.sh 第一个参数 第二个参数 第三个参数
实例--根据进程名关键字kill对应的进程:
1)进程关键字教程,并写死在判断中的情况。
#! /bin/bash
# kill进程函数 killProcess(){ echo "filename:$0"; echo "firstParameter:$1" echo "firstParameter:$2" echo "firstParameter:$3" if [ $1 = 'kill供货打桩' ]; then
# ps和grep和awk组合过滤出进程id,作为参数传给xargs kill -9 ps -aux |grep 'uwsgi --http :8001 --chdir /root/Desktop/Suppli'|grep -v grep|awk '{print $2}'|xargs kill -9; ps -aux |grep 'uwsgi --http :8001 --chdir /root/Desktop/Suppli'; elif [ $1 = 'kill自动化定时' ]; then ps -aux | grep '/usr/sbin/CROND -n' | grep -v grep|awk '{print $2}' | xargs kill -9; ps -aux | grep 'python /root/Desktop/Automation/MainThread.py'| grep -v grep | awk '{print $2}' | xargs kill -9 ; ps -aux | grep 'python /root/Desktop/Automation/MainThread.py' fi } killProcess $1 $2 $3 # 传参调用函数
2)直接传进程关键字的情况
#! /bin/bash # kill进程函数 killProcess(){ echo "filename:$0"; echo "firstParameter:$1" echo "firstParameter:$2" echo "firstParameter:$3" ps -aux |grep $1|grep -v grep|awk '{print $2}'|xargs kill -9; } killProcess $1 $2 $3 # 传参调用函数