1. [Shell 脚本编程]
  2. : 脚本是一个包含一系列命令序列的文本文件, 当运行这个脚本文件时,文件中包含的命令序列将得到执行
  3. // 脚本主要由两部分组成: 脚本解释器和命令序列
  4. // #!/bin/bash 指明脚本解释器为Bash Shell
  5. []
  6. # 查看系统, 安装的SHELL脚本解释器
  7. : cat /etc/shells
  8. : echo $SHELL
  9. # SHELL 环境
  10. : 系统环境, 永久环境变量, 变量写入配置文件
  11. => /etc/profile 针对所有用户生效
  12. => $HOME_name/.bash_profile 针对特定用户有效
  13. : 系统预定义的环境变量
  14. // PATH、 HOME、SHELL、PWD等
  15. : 临时环境, 临时环境变量
  16. // 用户在当前登陆环境生效的变量
  17. // 用户登陆系统后, 直接在命令行上定义的环境变量便只能在当前的登陆环境中使用
  18. [分类]
  19. : 常见的shell分为两大主流
  20. sh:
  21. Bourne shellsh ,Solaris,hpux默认shell
  22. Bourne again shellbash ,Linux系统默认shell
  23. csh:
  24. C shell(csh)
  25. tc shell(tcsh)
  26. [SHELL 脚本格式]
  27. : 首行, 表示脚本将要调用的shell解释器
  28. // #!/bin/bash
  29. // #!符号能够被内核识别成是一个脚本的开始, /bin/bash 脚本解释器绝对路径
  30. : 执行, 输入脚本的绝对路径或相对路径
  31. // /root/helloWorld.sh | ./helloWorld.sh
  32. : bashsh + 脚本 执行
  33. : 脚本的路径前再加". " source 执行
  34. // 第一种和第二种会新开一个bash, 不同bash中的变量无法共享。第三种, 在同一个shell里面执行的

Bash - 简介 - 图1

基本语法

命令参数

  1. []
  2. : Shell脚本也可以使用命令行参数
  3. // $# 传入脚本的命令行参数个数
  4. // $* 所有命令行参数值, 在各个参数值之间留有空格
  5. // $0 第0个命令行参数, 命令行本身(Shell文件名)
  6. // $1 第1个命令行参数
  7. vim ec.sh
  8. #!/bin/bash
  9. echo "当前脚本名称为$0"
  10. echo "总共有$#个参数,分别为$*"
  11. echo "第一个参数为$1,第五个为$5"

变量

  1. [变量]
  2. : 分类, 用户自定义变量,环境变量,位置参数变量和预定义变量
  3. : Shell脚本允许用户设置和使用自己的变量
  4. // 变量可以使数字或者字符串,用户无需指定其类型,也无需在使用前定义。
  5. // 定义时无需加"$", 赋值“=”左右不能有空格, 注释用“#”
  6. : set 查看设置变量
  7. : unset 撤销变量
  8. # 位置参数变量
  9. // $n , n为数字, 0代表命令本身, 1-$9代表第一到第9个参数,十以上的参数需要用大括号包含,如${10}。
  10. // $* , 代表命令行中所有的参数,把所有的参数看成一个整体。以"12 … $n"的形式输出所有参数
  11. // $@ , 代表命令行中的所有参数,把每个参数区分对待。以"1""2" … "$n" 的形式输出所有参数
  12. // $# , 代表命令行中所有参数的个数。添加到shell的参数个数
  13. # 预定义变量
  14. // $? , 执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定)
  15. // $$ , 当前进程的进程号(PID),即当前脚本执行时生成的进程号
  16. // $! , 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程 &
  1. : 数学表达式, 命令expr
  2. // 例如expr 5+1,当要把计算的结果赋值给其他变量时,还需要用反引号:·`expr 5+1`
  3. : 条件比较 (操作符两边必须有空格)
  4. => 比较
  5. //
  6. => 条件
  7. // -r file:文件对当前用户可以读取
  8. // -w file:文件对当前用户可以写入
  9. // -x file:文件对当前用户可以执行
  10. // -f file:文件是普通文件
  11. // -d file:文件是一个目录
  12. // -c file:文件是字符设备文件
  13. // -b file:文件是块设备文件
  14. // -s file:文件大小不为0
  15. // -t file:文件的描述符指定的设备为终端
  16. // -e file:文件已经存在
  17. // -a:与
  18. // -o:或
  19. // !:非
  20. : 流程控制语句
  21. // if-then
  22. if [ condition ]
  23. then
  24.   commands
  25. else
  26.   commands
  27. fi
  28. // 方括号左右两边必须有空格
  29. : 循环语句
  30. // for
  31. for var in list
  32. do
  33.   commands
  34. done
  35. // while
  36. while condition
  37. do
  38.   commands
  39. done
  40. : 分支命令, case命令
  41. case var in
  42.   mode1) command1;command2;;
  43.   mode2) command1;command2;;
  44. esac