前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell学习——运维自动化

Shell学习——运维自动化

作者头像
C3ting
发布2023-12-26 18:43:31
1370
发布2023-12-26 18:43:31
举报
文章被收录于专栏:C3tingC3ting

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、命令执行:

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

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

例如:

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

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

image-20230607152757965
image-20230607152757965

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

image-20230607152844205
image-20230607152844205

2、变量:

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

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

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

例如:

代码语言:javascript
复制
name="C3ting"       # 定义一个名为name的变量,并赋值为"C3ting"
age=25            # 定义一个名为age的变量,并赋值为25
echo $name        # 输出变量name的值
image-20230607153519089
image-20230607153519089
image-20230607153539857
image-20230607153539857

3、条件语句:

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

条件语句的语法为:

代码语言:javascript
复制
if [ 条件 ]; then
  # 执行条件为真时的命令或代码块
else
  # 执行条件为假时的命令或代码块
fi

在条件语句中,常用的条件判断符号有:

  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -lt:小于
  • -ge:大于等于
  • -le:小于等于
  • -z:字符串为空

例子:判断两个数是否相等

代码语言:javascript
复制
num1=10
num2=20
if [ $num1 -eq $num2 ]; then
  echo "相等."
else
  echo "不相等."
fi
image-20230607154134687
image-20230607154134687
image-20230607154208567
image-20230607154208567

4、循环结构:

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

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

循环结构的语法为:

代码语言:javascript
复制
# for循环示例
for 变量 in 列表; do
  # 执行循环体中的命令或代码块
done

# while循环示例
while [ 条件 ]; do
  # 执行循环体中的命令或代码块
done

例子:

代码语言:javascript
复制
# 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-20230607155056969
image-20230607155129288
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系统中广泛使用,具有强大的文本处理能力。

基本语法:

代码语言:javascript
复制
sed options 'command' file

常用选项:

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

常用命令:

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

代码语言:javascript
复制
sed 's/foo/bar/' file.txt

删除操作:d,删除匹配的行。

代码语言:javascript
复制
sed '/pattern/d' file.txt

插入操作:i,在匹配的行之前插入文本。

代码语言:javascript
复制
sed '/pattern/i new line' file.txt

追加操作:a,在匹配的行之后追加文本。

代码语言:javascript
复制
sed '/pattern/a new line' file.txt

打印操作:p,打印匹配的行。

代码语言:javascript
复制
sed -n '/pattern/p' file.txt

区间操作:使用起始模式和结束模式指定操作的行范围。

代码语言:javascript
复制
sed -n '/start/,/end/p' file.txt

脚本文件操作:从文件中读取sed命令。

代码语言:javascript
复制
sed -f script.sed file.txt

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

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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Shell学习——运维自动化
    • 一、什么是shell
      • 二、Shell基础语法
        • 三、奇妙组合
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com