学习shell的价值:
1.Linux服务器的基本操作和管理
2.前端Node.js服务的进程管理、问题排查、资源监控等运维操作
3.使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
shell构成
shell首先是解释器,解释器可以执行脚本命令,也提供了很多核心的工具,最后是第三方库,包括node、朋友Thom等封装的一些模块。其次是一门编程语言。
shell变量
自定义变量
环境变量
系统环境变量
管道
管道与管道符 | ,作用是将前一个命令的结果传递给后面的命令
语法:cmd1 | cmd2
要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理
注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set-o pipefail设置shel遇到管道错误退出
判断命令
shell中提供了test、[、[[三种判断符号,可用于:
整数测试
字符串测试
文件测试
语法:
test condition
[condition]
[condition]
注意:
-
中括号前后要有空格符
-
[和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串
-
中括号内的变量,最好都是用引号括起来
-
[[更丰富,在整形比较中支持<、>、=,在字符串比较中支持=~正则
分支语句
语法1:
if condition ;then
程序段
elif condition; then
程序段
esle
程序段
fi
语法2:
case $变量in:
“第一个变量内容")
程序段
;;
"第一个变量内容")
程序段
;;
*)
程序段
;;
esac
循环
while循环
while condition ; do程序段;done
until循环
until condition ; do程序段;done
for循环
for var in[words…];do程序段;done
函数
语法一:
funcName(){echo "abc";}
语法二:
function funcName(){echo "abc";}
注意:
-
shell自上而下执行,函数必须在使用前定义
-
函数获取变量和shell script类似,1、$2...获取
-
函数内return仅仅表示函数执行状态,不代表函数执行结果
-
返回结果一般使用echo、printf,在外面使用$()、“获取结果
-
如果没有return,函数状念是上一条命令的执行状态,存储在$7中
调试和前端集成
调试
1.普通log,使用echo、printf
2.使用set命令
3.vscode debug插件
VSCode配置
1.shellman:代码提示和自动补全
2.shellcheck:代码语法校验
3.shell-format:代码格式化
4.Bash Debug:支持单步调试
-安装vscode插件
-编写launch.json文件
-升级bash到4.x以上版本
前端集成
1.node中通过exec、spawn调用shell命令
2.shell脚本中调用node命令
3.借助zx等库进行javascript、shell script的融合
借助shell完成系统操作,文件io、内存、磁盘系统状态查
借助nodejs完成应用层能力,网络io、计算等
例. 创建一个简单的列目录和日期的shell 脚本并运行之。
【操作步骤】
⑴输入下列命令,创建一个新文件:cat > new_script
⑵输入下列行:
echo “Your files are:”
ls
echo “today is”
date
按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:
cat new_script
⑷运行脚本,输入它的文件名:
new_script
该脚本不运行。
⑸输入下列命令,显示文件的权限:
ls –l new _script
权限表明该文件不是可执行。要通过简单调用文件名来运行脚本,必须有权限。
⑹输入下列命令,使new_script变成可执行文件。
chmod +x new_script
⑺要查看新的权限,输入:
ls –l
现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:
new_script
所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比如:
command not found
输入下列命令:
./new_script
该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.”。
个人总结
这节课让我学会了如何运用shell的变量、特殊字符、输入输出命令等进行shell脚本的建立与执行,并且掌握了运用常用的shell程序控制结构语句进行 shell程序设计与执行。让我能对shell有更进一步的了解。