介绍
Shell,中文称为壳,是一个提供操作界面的软件,类似于cmd的命令解析器,同时还是一种程序设计语言。在平时学习中,我比较少用shell作为语言那一方面的功能,今天就学习一手
价值
- Linux服务器的基本操作和管理
- Node.js服务的进程管理、问题排查、资源监控等运维操作
- 用Shell编写TCE、SCM、Docker脚本,完成服务编译和部署
构成
语法和命令
1、变量
自定义变量
#等号周围不能有空格,不能像其他语言那样为了好看加个空格
size=3
num=4
系统环境变量
2、运算符和引用
例子有说后台运行的符号&(与),可以让命令后台运行,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";}
9、模块化
原理:在当前Shell内执行函数文件
方式:source [函数文件路径]
执行过程和原理
1、执行
- (#! 路径)选择命令解释器
- 三种启动方式
./file.sh
bash ./file.sh
sourse ./file.sh
2、执行过程
- 字符解析
- Shell展开
- 重定向
- 执行命令
- 收集状态并返回