shell位于内核层和应用层之间,解释用户的命令交给内核执行。

    shell版本:bash,dash,sh,ksh,csh

    传统使用命令的形式(复用性差):

    1.用户开启终端;2.键入命令和参数;回车执行

    Shell脚本是一个包含若干命令与执行逻辑的集合。

    脚本解释型语言,动态解释执行,没有编译过程

    Shell脚本编写:

    .sh 扩展名可省略

    首行声明 #!/bin/bash

    添加执行权限chmod +x shell.sh

    变量

    没有作用域概念,都为全局资源

    变量定义时需要初始化

    不能加无意义空格 类似这种错误写法var a = 1

    约定上大写定义变量,数字 下划线 大写字符,不能数字打头

    • 永久变量(环境变量) shell中可以直接使用
    • 临时变量

      • 用户自定义变量
      • 位置变量(内置)
      • 特殊变量

    默认变量没有类型 默认存储数据为字符串

    使用变量要加$取值符号 加{}

    使用变量存储内部命令执行结果使用``包裹

    ‘aaa’表示纯字符串 “ “表示字符串

    1. BL1=SHUCHU
    2. BL2=FILE
    3. BL3=AA
    4. Q1="WHERE ARE YOU"
    5. A1=`date`
    6. echo "${BL1} ${BL2} ${BL3}"
    7. echo "${Q1}"
    8. echo "${A1}"
    1. 位置变量
    2. ./app arg1 arg2 arg3
    3. shellargv[0] ----- arg1 ....
    1. 特殊变量
    2. $* 所有参数
    3. $# 参数个数
    4. $$ 获取shell进程pid
    5. $? 获取上一个命令的返回值
    6. $! 上一个执行后台命令进程的pid

    四则运算

    • 通过expr命令完成四则运算 (配合反引号expr)

      • 乘法*要加转义符\*

      • expr 1 + 1

      • expr 1 \* 1

      • ```shell NUMA=1 NUMB=2

    ANS=expr ${NUMA} + ${NUMB}

    echo ${ANS}

    1. -
    2. 将变量定义为整型`$(NUMA)+$(NUMB)`
    3. **逻辑判断**
    4. - test测试命令 (结果true/false
    5. - 能测试文件是否存在 测试文件的权限等等....
    6. ```shell
    7. # 整数测试
    8. test a -eq b # 判断如果相等为真
    9. test a -ne b # 判断不等返回真
    10. test a -gt b # 判断大于返回真
    11. test a -ge b # 大于等于返回真
    12. # lt小于 le小于等于
    13. # 字符串测试
    14. test str1 = str2 # 相等返回真
    15. test str1 != str2
    16. test -z str1 # 字符串为0返回真
    17. test -n str1 # 字符串非0返回真
    18. # 文件测试
    19. test -e files # 文件存在返回真
    20. test -r files # 文件有读权限 返回真 -w -x 同理
    21. test -f files # 普通文件返回真
    22. test -d files # 目录文件返回真
    23. test -c files # 字符设备文件返回真
    24. test -b files # 块设备文件返回真
    25. test -s files # 文件非空有内容返回真
    • 特殊符号 逻辑与/或

      • -o 逻辑或
      • -a 逻辑与
      • test -f files -o -d files
    • if单项选择流程判断
    1. if test -e files
    2. then # 为真
    3. echo "true"
    4. else
    5. echo "false"
    6. fi # 判断块
    7. # elseif
    8. if test -f files
    9. then
    10. echo "f"
    11. elif test -d files
    12. then
    13. echo "d"
    14. else
    15. echo "other"
    16. fi
    17. # 循环嵌套
    18. if test -e files
    19. then
    20. if test -s files
    21. then
    22. echo "e s"
    23. else
    24. echo "empty"
    25. fi
    26. else
    27. echo "not exist"
    28. fi
    • 简化版本测试语句

      • test -e files —> [ -e files ] 注意空格