Shell学习——运维自动化


一、什么是shell

Shell是一种用于与操作系统内核进行交互的命令行解释器(command-line interpreter)。它是一种命令语言,提供了一种通过键入文本命令来执行操作的方式。Shell还可以解释和执行脚本文件,这些脚本文件包含了一系列按顺序执行的命令。

在Linux和其他类Unix系统中,常见的Shell是Bourne Shell(sh),它是最早的Unix Shell。然而,现代Linux系统通常使用Bash(Bourne Again Shell)作为默认Shell,Bash是对Bourne Shell的扩展和改进。

Shell提供了许多功能和特性,使用户能够与操作系统进行各种交互操作,包括:

  1. 命令执行:通过键入命令并按下回车键,Shell会将命令传递给操作系统内核执行,然后显示执行结果。
  2. 管道和重定向:Shell允许将一个命令的输出作为另一个命令的输入,通过使用管道符号(|)连接命令。另外,Shell还支持将命令的输入或输出重定向到文件或其他设备,例如使用">"将输出重定向到文件,"<"从文件中读取输入。
  3. 变量和环境设置:Shell允许定义和使用变量来存储数据,并使用这些变量在命令中进行操作。它还提供了环境变量,用于存储操作系统和用户级别的配置信息。
  4. 条件语句和循环结构:Shell提供了条件语句(如if、case)和循环结构(如for、while),允许根据条件执行不同的操作或重复执行一组命令。
  5. 脚本编写:Shell脚本是由一系列Shell命令组成的文本文件。通过编写脚本,可以将一系列命令和操作组合在一起,以便批量执行、自动化任务或实现复杂的操作逻辑。

总之,Shell是一种命令行解释器,它为用户提供了一种与操作系统进行交互和执行命令的方式。通过Shell,用户可以控制和管理操作系统的各种功能,并使用脚本编写来实现自动化和批处理操作。


二、Shell基础语法

1、命令执行:

  • 输入命令并按下回车键即可执行命令。

  • 命令的输出可以通过重定向(>或>>)保存到文件中,或者通过管道(|)传递给其他命令进行处理。

  • 例如:

    ls -l                 # 执行ls命令
    cat file.txt          # 打印文件内容
    ls -l > output.txt    # 将ls命令的输出保存到output.txt文件中
    ls -l | grep ".txt"   # 通过管道将ls命令的输出传递给grep命令进行过滤
    

    实例:新建一个test.sh的文件,敲入一下代码执行

    image-20230607152757965

    你会发现和直接输入命令执行的是一样的

    image-20230607152844205

2、变量:

  • 变量用于存储和操作数据,变量名一般以字母或下划线开头,并区分大小写。

  • 变量赋值时不需要使用类型声明,可以直接使用等号(=)进行赋值。

  • 通过$符号可以获取变量的值。

  • 例如:

    name="C3ting"       # 定义一个名为name的变量,并赋值为"C3ting"
    age=25            # 定义一个名为age的变量,并赋值为25
    echo $name        # 输出变量name的值
    

    image-20230607153519089

    image-20230607153539857

3、条件语句:

  • if语句用于根据条件执行不同的命令或代码块。

  • 条件语句的语法为:

    if [ 条件 ]; then
      # 执行条件为真时的命令或代码块
    else
      # 执行条件为假时的命令或代码块
    fi
    
  • 在条件语句中,常用的条件判断符号有:

    • -eq:等于
    • -ne:不等于
    • -gt:大于
    • -lt:小于
    • -ge:大于等于
    • -le:小于等于
    • -z:字符串为空
  • 例子:判断两个数是否相等

    num1=10
    num2=20
    if [ $num1 -eq $num2 ]; then
      echo "相等."
    else
      echo "不相等."
    fi
    

    image-20230607154134687

    image-20230607154208567

4、循环结构:

  • for循环用于迭代一个列表或范围,并执行相应的命令或代码块。

  • while循环用于在条件为真时重复执行一组命令或代码块。

  • 循环结构的语法为:

    # for循环示例
    for 变量 in 列表; do
      # 执行循环体中的命令或代码块
    done
    
    # while循环示例
    while [ 条件 ]; do
      # 执行循环体中的命令或代码块
    done
    
  • 例子:

    # for循环示例
    for i in 1 2 3; do
      echo "Number: $i"
    done
    
    # while循环示例
    counter=0
    while [ $counter -lt 5 ]; do
      echo "Counter: $counter"
      counter=$((counter + 1))
    done
    

    image-20230607155056969

    image-20230607155129288


三、奇妙组合

1、文件操作

  • ls:列出目录中的文件和子目录。

    • 例如:lsls -lls -a
  • cd:切换当前工作目录。

    • 例如:cd /path/to/directorycd ..
  • pwd:显示当前工作目录的路径。

  • mkdir:创建新目录。

    • 例如:mkdir new_directory
  • rm:删除文件或目录。

    • 例如:rm file.txtrm -r directory(递归删除目录)。
  • cp:复制文件或目录。

    • 例如:cp file.txt destinationcp -r directory destination(递归复制目录)。
  • mv:移动文件或目录,或对文件或目录重命名。

    • 例如:mv file.txt new_locationmv old_name.txt new_name.txt
  • touch:创建新文件或更新文件的访问和修改时间。

    • 例如:touch file.txt
  • cat:连接文件并显示其内容。

    • 例如:cat file.txt
  • less:逐页显示文件内容。

    • 例如:less file.txt
  • head:显示文件的开头部分。

    • 例如:head file.txthead -n 10 file.txt(显示前10行)。
  • tail:显示文件的末尾部分。

    • 例如:tail file.txttail -n 10 file.txt(显示最后10行)。
  • grep:在文件中搜索指定模式的行。

    • 例如:grep pattern file.txt
  • wc:统计文件的行数、字数和字符数。

    • 例如:wc file.txtwc -l file.txt(只显示行数)。
  • chmod:修改文件的权限。

    • 例如:chmod 755 file.txt(将文件权限设置为 rwxr-xr-x)。

这些是一些常用的Shell文件操作命令,可以用于管理文件和目录,复制、移动、删除文件,查看文件内容等。每个命令都有更多的选项和功能,

2、sed(Stream Editor)是一种流式文本编辑器,常用于对文本进行转换、替换和处理。它通过读取文本流并根据指定的规则进行处理,然后将结果输出到标准输出或文件中。sed在Linux和Unix系统中广泛使用,具有强大的文本处理能力。

基本语法:

sed options 'command' file

常用选项:

  • -i:直接在原始文件中进行修改(in-place),而不是将结果输出到标准输出。
  • -e:允许在一行中使用多个编辑命令。

常用命令:

  • 替换操作:s/原字符串/新字符串/,用新字符串替换原字符串。

    sed 's/foo/bar/' file.txt
    
  • 删除操作:d,删除匹配的行。

    sed '/pattern/d' file.txt
    
  • 插入操作:i,在匹配的行之前插入文本。

    sed '/pattern/i new line' file.txt
    
  • 追加操作:a,在匹配的行之后追加文本。

    sed '/pattern/a new line' file.txt
    
  • 打印操作:p,打印匹配的行。

    sed -n '/pattern/p' file.txt
    
  • 区间操作:使用起始模式和结束模式指定操作的行范围。

    sed -n '/start/,/end/p' file.txt
    
  • 脚本文件操作:从文件中读取sed命令。

    sed -f script.sed file.txt
    
  • 其他高级操作:sed还支持正则表达式匹配、变量、条件判断等高级功能。

sed命令可以通过结合使用多个命令来实现复杂的文本处理。在命令中可以使用正则表达式进行模式匹配,还可以使用变量和控制结构来实现更灵活的处理逻辑。需要注意的是,默认情况下,sed命令不会修改原始文件,而是将结果输出到标准输出。如果要直接在原始文件中修改,可以使用-i选项。