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    # 传参调用函数