基础

常用命令

  1. # 输出
  2. echo ""
  3. echo -e "" # 支持特殊字符,包括颜色 \t \n
  4. echo -e "\e[1;30m text \e[0m" # ;30m到;36m是前景色,;40m到;46m是背景色
  5. echo -n "" # 不换行
  6. # 历史命令
  7. history
  8. history -c # 清空历史记录
  9. history -w # 保存到文件 ~/.bash_history
  10. ## 历史保留的命令的条数在 /etc/profile 的环境变量HISTSIZE的值
  11. # 别名
  12. alias hel="echo hel"
  13. unalias hel
  14. # 输入重定向
  15. < # 后面跟文件就是把文件的内容输入
  16. << # 当出现与开头相同的内容时将中间的内容输入
  17. [root@K8S-Deploy ~]# wc -l <<EOF
  18. > 11
  19. > 22
  20. > 33
  21. > EOF
  22. 3
  23. # 将内容片段作为输入
  24. # 特殊符号
  25. () 开启子shell,隔离变量作用域
  26. [] 用于变量测试
  27. $() 包含命令的结果,结果的值保存给前面的变量
  28. $(( $a + $b )) # 数学计算
  29. # 变量
  30. ## shell中默认的变量的值都是字符串类型,如果需要数学计算则需要类型转换
  31. # 设置shell环境
  32. set -u # 调用未声明的变量会报错,如果不设置按默认情况不会报错
  33. set -x # 执行命令前先输出命令
  34. set # 显示所有的用户变量
  35. unset # 删除变量
  36. # 环境变量
  37. export name=value # 设置环境变量
  38. unset name # 删除环境变量
  39. # 本地语言环境
  40. echo $LANG
  41. # 或
  42. locale
  43. # 位置参数
  44. $0 # 命令本身
  45. $1-$9 # 第1-9个参数
  46. ${10-999} # 第10-999个参数
  47. $# # 参数个数
  48. $* # 所有参数组成的一个字符串整体
  49. $@ # 所有参数组成的一个数组
  50. # 预定义变量
  51. $? # 上一条命令返回状态
  52. $$ # 当前PID
  53. $! # 后台最后一个进程的PID
  54. # 声明变量类型declare
  55. declare [+-]类型 变量名
  56. ## -是加上某类型
  57. ## +是减去某类型
  58. ## 类型
  59. a 数组
  60. i 整数
  61. r 常量,即只读的变量readonly
  62. x 环境变量
  63. p 输出变量类型
  64. # 交互式读取用户输入
  65. read
  66. -t # 超时时间,秒
  67. -p # 提示字符串
  68. -n # 允许输入的字数
  69. -s # 像输入密码一样,不显示输入内容

变量测试与内容置换

image.png

登录主机欢迎提示语

  • motd(Message Of The Day)每日消息

image.png

高级

正则表达式

image.png
image.png

字符串处理

  1. # 列切分
  2. cut
  3. -d # 指定分隔符,默认空格
  4. -f # 指定需要提取某一列 如1,3,7...
  5. # 格式化输出
  6. printf
  7. # 排序
  8. sort
  9. # -t 分隔符
  10. # -k 第几列
  11. # -n 按数字排序
  12. # -r 逆序
  13. # -u 去重
  14. # 去重
  15. uniq
  16. # -i 忽略大小写
  17. # 统计
  18. wc
  19. # -l line
  20. # -w word
  21. # -c character

三剑客

  1. # awk
  2. awk '条件{动作} 条件{动作}...' 文件名
  3. # $0 表示整行内容
  4. # $1-$n表示第n列
  5. # NF 行共有多少列
  6. # NR 当前是多少行
  7. # FS 指定分隔符
  8. # 条件
  9. # 可以写BEGIN|END,做初始化和结束后的动作
  10. # 可以写正则表达式
  11. # 可以写$n >= 80 的数值逻辑关系判断
  12. # 可以写$n ~ "M" 的字符串包含关系
  13. # awk脚本
  14. # 把''里面的条件和动作都写到一个脚本文件demo.awk
  15. # 然后使用 awk -f demo.awk filename 即可
  16. # 里面也可以写function 定义函数
  17. # sed
  18. sed 选项 '[动作]' 文件名
  19. # -n 只输出处理的行,默认全部输出
  20. # -i 将修改写入文件
  21. # -r 支持扩展正则
  22. # -e 执行多个动作
  23. # 动作
  24. # 增 a|i sed '3i 内容' 文件名 # i前面插入,a后面插入
  25. # 删 d sed '2-5d' 文件名 # 删除2-5行
  26. # 改 c sed '3c 内容' 文件名 # 第三行替换内容
  27. sed '[行号]s/旧内容/新内容/g' 文件名 # 查找替换,可以不写行号就是全局替换
  28. # 查 p sed -n '3p' 文件名 # 显示第三行
  29. # grep

条件判断

  1. # 判断文件类型
  2. -e 是否存在
  3. -b 块设备
  4. -c 字符设备
  5. -d 目录
  6. -f 文件
  7. -s 空文件
  8. # 判断文件权限
  9. -r
  10. -w
  11. -x 执行
  12. # 整数比较
  13. -eq 相等
  14. -ne 不相等
  15. -gt 大于
  16. -lt 小于
  17. -ge 大于等于
  18. -le 小于等于
  19. # 字符串判断
  20. -z 是否为空
  21. -n 是否非空
  22. == 是否相等
  23. != 是否不相等
  24. # 逻辑与或非
  25. ! 取反
  26. -a and
  27. -o or

流程控制

  1. # if/else
  2. if [ ];then # 因为是2条语句需要;隔开
  3. # 执行语句
  4. fi
  5. if [ ]
  6. then
  7. fi
  8. if [ ]
  9. then
  10. # 执行
  11. else
  12. # 执行
  13. fi
  14. if [ ]
  15. then
  16. # 执行
  17. elif [ ];then
  18. # 执行
  19. else
  20. # 执行
  21. fi
  22. # case
  23. case 变量 in
  24. "值1")
  25. # 执行
  26. ;;
  27. "值2")
  28. # 执行
  29. ;;
  30. *)
  31. # 执行
  32. ;;
  33. esac
  34. # for
  35. for 变量 in array
  36. do
  37. # 执行
  38. done
  39. # while
  40. while [ 条件 ]
  41. do
  42. # 执行
  43. done
  44. # until 条件是假是才会执行
  45. until [ 条件 ]
  46. do
  47. # 执行
  48. done
  49. # 函数
  50. function name(){
  51. # 执行
  52. # echo $0 $1 ...
  53. }
  54. name 1 2
  55. # 退出
  56. exit
  57. break
  58. continue

PPT

shell编程.pptx