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

74 阅读2分钟

介绍

Shell,中文称为壳,是一个提供操作界面的软件,类似于cmd的命令解析器,同时还是一种程序设计语言。在平时学习中,我比较少用shell作为语言那一方面的功能,今天就学习一手

价值

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

构成

image.png

语法和命令

1、变量

image.png

自定义变量

#等号周围不能有空格,不能像其他语言那样为了好看加个空格
size=3
num=4

image.png

系统环境变量

image.png

2、运算符和引用

image.png

例子有说后台运行的符号&(与),可以让命令后台运行,Shell仍能与用户交互;若与nohup一起用则能达到关掉Shell软件后,命令仍在运行的效果

3、管道与管道符|

作用:前一个命令的结果传递给后面的命令,也就是前面的输出是后面的输入

语法:cmd1|cmd2

注意:由于后面的指令要接受前面指令的输入,所以后面指令要能接受标准输入,如grep命令,如ls(展示目录下内容)、mv(给文件改名或移位)等不能直接使用的命令,则可用xargs预处理

4、重定向

输出重定向符号

  • >:覆盖写入文件
  • >>:追加写入文件
  • 2>:错误输出写入文件
  • &>:正确和错误输出统一写入文件

输入重定向符号

  • <
  • <<

5、判断命令

Shell提供test、[ 、[[三种判断符号用于整数测试、字符串测试、文件测试

语法

  • test condition
  • [ condition ]
  • [[ condition ]]
#test为例
#整数测试
test $n1 -eq $n2 #等于
test $n1 -lt $n2 #小于
test $n1 -gt $n2 #大于

#字符串测试
test -z $str #为空
test -n $str #非空
test $str_a = $str_b #相同

6、分支语句

语法1

if condition; then
程序段
elif condition; then
程序段
esle
程序段
fi

语法2

case $变量 in:
"第一个变量内容")
程序段
;;
"第一个变量内容")
程序段
;;
*)
程序段
;;
esac

7、循环

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

8、函数

  • funcName(){echo "abc";}
  • function funcName(){echo "abc";}

image.png

9、模块化

原理:在当前Shell内执行函数文件

方式:source [函数文件路径]

执行过程和原理

1、执行

  1. (#! 路径)选择命令解释器
  2. 三种启动方式
./file.sh
bash ./file.sh
sourse ./file.sh

2、执行过程

  1. 字符解析
  2. Shell展开
  3. 重定向
  4. 执行命令
  5. 收集状态并返回

3、Shell展开

image.png