已经学过很久了,回过头来做笔记并做一些补充,希望能更深刻理解!!!
学习 Shell 的价值
1.Linux服务器的基本操作和管理。
2.前端 Node.js 服务的进程管理,问题排查,资源监控等运维操作。
3.使用 shell 编写 TCE、SCM、Docker 脚本,完成服务编译和部署。
Shell 基础概念
终端
teletypewrite
终端模拟器
构成:解释器和编程语言
命令和语法
命令
Shell是一种用于交互式命令行界面的程序,也是一种脚本语言。在Linux和Unix系统中,常用的Shell是Bash。Shell命令是通过在命令行输入命令来执行的,常用的命令包括:
-
cd:切换当前工作目录。 ls:列出当前目录中的文件和子目录。 cp:复制文件或目录。 mv:移动或重命名文件或目录。 rm:删除文件或目录。 mkdir:创建一个新目录。 rmdir:删除一个空目录。 touch:创建一个新文件或更新一个已有文件的最后访问时间和修改时间。 cat:显示文件内容。 grep:在文件中查找指定的字符串。 chmod:修改文件或目录的权限。 ps:列出当前正在运行的进程。 kill:终止一个正在运行的进程。 top:显示系统资源使用情况和进程信息。
除了这些基本命令,Shell还支持管道、重定向、通配符等高级用法,可以用于自动化任务和批处理。Shell脚本可以实现复杂的逻辑和流程控制,是系统管理和软件开发中重要的工具。
shell管道(|)可以将一个命令的输出作为另一个命令的输入,实现命令之间的串联操作。例如,使用ls命令查看当前文件夹中的文件,然后使用grep命令查找其中包含“test”的文件名:
ls | grep test
重定向(>)可以将命令的输出重定向到文件中,或者从文件中读取内容作为命令的输入。例如,将echo命令的输出重定向到文件中:
echo "hello world" > hello.txt
通配符(*)可以匹配文件名中的任意字符。例如,使用ls命令查看当前文件夹中所有以“.txt”结尾的文件:
ls *.txt
变量
Shell中的自定义变量使用语法为:变量名=变量值,例如:my_var="Hello, World!"。在之后的脚本中,可以通过$my_var来引用这个变量的值。
而环境变量则是由操作系统或用户设置的全局变量,可以在不同的Shell进程中共享。设置环境变量的语法为:export 变量名=变量值,例如:export PATH=$PATH:/usr/local/bin。这里的PATH是一个特殊的环境变量,表示可执行文件的搜索路径。通过这种方式,我们可以将/usr/local/bin添加到PATH中,使得系统能够自动搜索和执行这个目录下的可执行文件。
运算符
关于Shell的运算符和引用,有以下几个知识点:
- 算术运算符:+、-、*、/、%等,用于进行数值计算。
- 比较运算符:-eq、-ne、-gt、-lt、-ge、-le等,用于比较数值的大小关系。
- 逻辑运算符:&&、||、!等,用于进行逻辑运算,例如判断多个条件是否成立。
- 字符串运算符:=、!=、-z、-n等,用于判断字符串的相等性、非相等性、长度等。
- 引用:符号用于引用变量,例如VAR表示引用名为VAR的变量的值。
- 命令替换:反引号或者$()用于执行命令,并用其输出结果来替换命令本身。
判断命令
Shell中的判断命令通常用于在脚本中测试条件,并根据测试结果执行不同的命令或操作。以下是一些常用的Shell判断命令及其用法:
-
test命令:test命令用于测试条件,并根据测试结果返回0或1。可以使用test命令检查文件是否存在、检查变量是否为空等。例如,要检查文件是否存在,可以使用以下命令:
if test -e /path/to/file then echo "File exists" else echo "File does not exist" fi
-
命令:[ ] 命令是test命令的一种简写形式。它可以使用与test命令相同的测试条件。例如,以下两个命令是等效的:
if test -e /path/to/file then echo "File exists" fi if [ -e /path/to/file ] then echo "File exists" fi
-
[[ ]] 命令:[[ ]] 命令是test命令的一种扩展形式,支持更多的测试条件。例如,可以使用[[ ]]命令判断字符串是否相等、判断变量是否为数字等。以下是一个使用[[ ]]命令的示例:
if [[ "str1"=="str1" == "str1"=="str2" ]] then echo "Strings are equal" fi
分支语句
在shell编程中,常用的分支语句有if语句和case语句。它们的知识点包括:
1.if语句:if语句用于根据条件执行不同的操作。它的语法格式为:
if condition then command1 command2 ... else command3 command4 ... fi
其中,condition是一个条件表达式,如果它的值为true,则执行then语句块中的命令,否则执行else语句块中的命令。
2.case语句:case语句用于根据不同的条件执行不同的操作。它的语法格式为:
case variable in pattern1) command1 command2 ... ;; pattern2) command3 command4 ... ;; *) command5 command6 ... ;; esac
其中,variable是一个变量,pattern1、pattern2是不同的模式,如果variable匹配某个模式,则执行对应模式下的命令。如果没有任何模式匹配variable,则执行默认的命令。
循环语法
循环语法是编程中常用的一种结构,Shell 也提供了多种循环结构来实现不同的需求。以下是 Shell 中常用的循环语法:
1.for 循环:for 循环可以遍历一组数据,并对每个数据执行相同的操作。for 循环的语法如下:
for 变量名 in 取值列表 do 循环体 done
2.while 循环:while 循环可以在满足某个条件的情况下一直执行循环体。while 循环的语法如下:
while [ 条件判断语句 ] do 循环体 done
3.until 循环:until 循环与 while 循环的执行条件相反,只有在条件不满足的情况下才会执行循环体。until 循环的语法如下:
until [ 条件判断语句 ] do 循环体 done
4.select 循环:select 循环可以在多个选项中进行选择,并执行相应的操作。select 循环的语法如下:
select 变量名 in 选项列表 do 循环体 done
函数
shell 函数是一组为了完成特定任务而集合在一起的命令序列,它可以在脚本中任何地方被调用。以下是 shell 函数的语法和知识点:
1.函数的定义:
function_name () { commands }
其中,function_name 是函数名,commands 是需要执行的命令序列。
2.函数的调用:
function_name
可以在脚本中任何地方调用函数,只需要使用函数名即可。
3.函数的传参:
可以向函数传递参数,参数在函数内部通过 $1、$2、$3 等变量来获取,例如:
function_name () { echo "第一个参数:1"echo"第二个参数:1" echo "第二个参数:1"echo"第二个参数:2" } function_name arg1 arg2
输出结果为:
第一个参数: arg1 第二个参数: arg2
4.函数的返回值
函数可以返回一个值,返回值通过 return 语句来指定,例如:
function_name () { return 10 } function_name echo "函数的返回值是: $?"
输出结果为:
函数的返回值是: 10
其中 $? 是上一个命令的返回值,也就是函数的返回值。
5.函数的作用域:
函数内部定义的变量和函数外部定义的变量是不同的,函数内部的变量只在函数内部可见,函数外部的变量只在函数外部可见。