什么是shell:

Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,
用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。

学习shell的原因:

1.Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理。

2.对于 JavaEE 和 Python 程序员来说,工作的需要,会要求你编写一些 Shell 脚本进行程序或者是服务器的维护,
比如编写一个定时备份数据库的脚本。

3.对于大数据程序员来说,需要编写 Shell 程序来管理集群。

shell脚本的编写执行方式:

1.格式要求
    脚本以#!/bin/bash 开头
    脚本需要有可执行权限
2.脚本的常用执行方式
    给要执行的脚本文件,添加可执行权限,使用./运行
    直接用 sh 脚本文件名 命令执行,不用赋予脚本可执行权限

shell的变量

Linux 中 Shell 的变量分为系统变量和用户自定义变量。
    系统变量:HOME,SHELL,PWD,USER

        查询指定系统变量:
            echo $HOME

        注:我们可以使用set命令显示当前 Shell 中所有变量。

    用户自定义变量
        1.普通变量
            A=100
        2.静态变量
            readonly B=2

        注:变量定义规则
            1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
            2.等号两侧不能有空格。
            3.变量名称一般习惯为大写,这是一个规范,大家遵守即可。

    设置环境变量(修改/etc/profile)
        1.export 变量名=变量值:将 Shell 变量输出为环境变量/全局变量。
        2.source 配置文件:让修改后的配置文件立即生效
        3.echo $变量名:查询环境变量的值

        注:多行注释
            :<<!
            需要注释的第一行内容
            需要注释的第二行内容
            !

    设置位置参数变量
        当我们执行一个 Shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,
        比如./myshell.sh 100 200
        这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息。

        $n: n为数字,0代表命令本身,9 代表第一到第九个参数,十以上的参数需要用大括号,如${10}
        $*:代表命令行中所有的参数 ,*把所有的参数看成一个整体
        $@:代表命令行中所有的参数,不过该命令是把每个参数区分对待
        $#:代表命令行中所有参数的个数

    预定义变量
        Shell设计者事先已经定义好的变量,可以直接在 Shell 脚本中使用。

        $$:当前进程的进程号。
        $!:后台运行的最后一个进程的进程号。
        $?:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;
        如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。

shell的运算符

第一种写法:$((表达式))
第二种写法:$[表达式]
第三种写法:`expr 10 + 10`  注:乘号为\*

shell中的条件判断

if判断
    if [ condition ] then
        满足if语句执行的代码
    fi

    常用判断条件
        (1) 字符串比较 =
        (2)两个整数比较 -lt(小于) -gt(大于) -le(小于等于) -ge(大于等于) -nt(不等于)
        (3)按照文件权限进行判断
        -r 有读的权限
        -w 有写的权限
        -x 有可执行的权限
        (4)按照文件的类型进行判断
        -f 文件存在,并且是一个常规文件
        -e 文件存在
        -d 文件存在并且文件是一个目录

if-else判断
    if [ 条件判断式 ]
    then
        代码
    elif [ 条件判断式 ]
    then
        代码
    ......
    else
        代码
    fi

case语句
    case $变量名 in
        "值1")
        如果变量名等于值1,执行的代码;;
        "值2")
        如果变量名等于值2,执行的代码;;
        ... ...
        *)
        如果都不满足以上的条件,则执行此代码;;
    esac

shell中的循环

for循环
    1.
    for 变量 in 值1 值2 值3…
    do
        满足循环条件需要执行的代码
    done
    2.
    for((初始值;循环控制条件;变量变化))
    do
        满足循环条件需要执行的代码
    done

while循环
    while [ 条件判断式 ]
    do
        代码
    done

shell中读取控制台输入

read
    read 选项 参数
        -p 指定读取值时的提示符
        -t 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了(放弃输入)

shell函数

系统函数
    basename
        basename 文件的完整路径 [文件后缀]
        返回文件名
    dirname
        dirname 文件完整路径
        返回完整路径前面部分

自定义函数
    function getSum()
    {
        SUM=$[$n1+$n2]
        echo "两数之和为:$SUM"
    }

    read -p "请输入一个数字:" n1
    read -p "请再输入一个数字:" n2
    # 调用函数
    getSum $n1 $n2