Shell脚本和编程| 青训营笔记

80 阅读1分钟

学习Shell的价值

  1. Linux服务器的基本操作和管理
  2. 前端Node.js服务的进程管理,问题排查,资源监控等运维操作
  3. 使用shell脚本编写TCE,SCM,Docker脚本,完成服务编译和部署

配置文件的加载

QQ图片20230416185611.png

运算符和运用

QQ图片20230416185826.png

重定向

QQ图片20230416190153.png

判断命令

  • shell中提供了test,单框号和双括号三种判断符号,可用于:整数测试,字符串测试,文件测试.]
  • 语法 : test condition [condition] [[condition]]
  • 整数测试

  • test nleqnl -eq n2
  • test nlltnl -lt n2
  • test nlgtnl -gt n2
  • 字符串测试

  • test -Z $str_a
  • test -n $str_a
  • test -str_a = $str_b
  • 文件测试

  • test -e /dmt && echo "exist"
  • test -f /user/bin/npm && echo "file exist"

分支语句

if-elif-else=fi case $变量 in: esac

循环语句

while 循环 while condition: do 程序段:done until循环 until condition; do 程序段:done for循环 for var in [words...]; do 程序段:done

函数

1.funcName(){} 2.function funcName() {}

函数注意点

  1. shell 自上而下执行,函数必须在使用前定义
  2. 函数获取变量和shell,script类似,0代表函数名,后续参数通过0代表函数名,后续参数通过1,$2...获取
  3. 函数内return仅仅表示函数的执行状态,不代表函数执行结果
  4. 返回结果一般使用echo,printf,在外面使用$(),``获取结果
  5. 如果没有return,函数状态是上一条命令的执行状态,存储在$?中

常用的命令

QQ图片20230416190153.png

执行

shell脚本一般以.sh结尾,也可以没有,这是一个约定

执行过程

  1. 字符解析
  • 识别换行符,分号,做行的分割
  • 识别命令连接符做的命令的分割
  • 识别空格,tab符,做命令和参数的分割
  1. shell展开,
  2. 重定向
  3. 执行命令
  4. 收集状态并返回

shell展开

  1. 大括号的展开
  • 字符串序列

  • a{b,c,d}e => abe ace ade
  • 表达式序列

  • {1..5} => 1 2 3 4 5
  • {1..5..2} => 1 3 5
  • {a..e} => a b c d e
  1. 波浪号的展开
  • 当前用户主目录

  • => $HOME
  • /foo => $HOME/foo
  • 指定用户的主目录

  • fred/foo => 用户fred的$HOME/foo
  • 当前工作目录

  • +/foo => $PWD/foo
  • #上一个工作目录
  • -/foo => ((OLDPWD-'-=')/foo
  1. 参数展开
  • str = abcdefg
  • sp1 = ${str##*d}
  • sp2 =${str%%d*}
  • echo $sp1 #输出 efq
  • echo $sp2 #输出 abc
  1. 命令替换
  • echo $(whoimi)
  • foo(){ echo "asdasd"}
  • a = foo
  1. 数学计算
  2. 文件名展开

调试

  1. 普通log 使用echo
  2. 使用set命令
  3. vscode debug插件