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

120 阅读3分钟

已经学过很久了,回过头来做笔记并做一些补充,希望能更深刻理解!!!

学习 Shell 的价值

1.Linux服务器的基本操作和管理。

2.前端 Node.js 服务的进程管理,问题排查,资源监控等运维操作。

3.使用 shell 编写 TCE、SCM、Docker 脚本,完成服务编译和部署。

Shell 基础概念

终端

teletypewrite

终端模拟器

构成:解释器和编程语言

命令和语法

命令

Shell是一种用于交互式命令行界面的程序,也是一种脚本语言。在Linux和Unix系统中,常用的Shell是Bash。Shell命令是通过在命令行输入命令来执行的,常用的命令包括:

  1.  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的运算符和引用,有以下几个知识点:

  1. 算术运算符:+、-、*、/、%等,用于进行数值计算。
  2. 比较运算符:-eq、-ne、-gt、-lt、-ge、-le等,用于比较数值的大小关系。
  3. 逻辑运算符:&&、||、!等,用于进行逻辑运算,例如判断多个条件是否成立。
  4. 字符串运算符:=、!=、-z、-n等,用于判断字符串的相等性、非相等性、长度等。
  5. 引用:符号用于引用变量,例如VAR表示引用名为VAR的变量的值。
  6. 命令替换:反引号或者$()用于执行命令,并用其输出结果来替换命令本身。

判断命令

Shell中的判断命令通常用于在脚本中测试条件,并根据测试结果执行不同的命令或操作。以下是一些常用的Shell判断命令及其用法:

  1. test命令:test命令用于测试条件,并根据测试结果返回0或1。可以使用test命令检查文件是否存在、检查变量是否为空等。例如,要检查文件是否存在,可以使用以下命令:

    if test -e /path/to/file then echo "File exists" else echo "File does not exist" fi

  2. 命令:[ ] 命令是test命令的一种简写形式。它可以使用与test命令相同的测试条件。例如,以下两个命令是等效的:

    if test -e /path/to/file then echo "File exists" fi if [ -e /path/to/file ] then echo "File exists" fi

  3. [[ ]] 命令:[[ ]] 命令是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.函数的作用域:

函数内部定义的变量和函数外部定义的变量是不同的,函数内部的变量只在函数内部可见,函数外部的变量只在函数外部可见。