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提供了许多功能和特性,使用户能够与操作系统进行各种交互操作,包括:
- 命令执行:通过键入命令并按下回车键,Shell会将命令传递给操作系统内核执行,然后显示执行结果。
- 管道和重定向:Shell允许将一个命令的输出作为另一个命令的输入,通过使用管道符号(|)连接命令。另外,Shell还支持将命令的输入或输出重定向到文件或其他设备,例如使用">"将输出重定向到文件,"<"从文件中读取输入。
- 变量和环境设置:Shell允许定义和使用变量来存储数据,并使用这些变量在命令中进行操作。它还提供了环境变量,用于存储操作系统和用户级别的配置信息。
- 条件语句和循环结构:Shell提供了条件语句(如if、case)和循环结构(如for、while),允许根据条件执行不同的操作或重复执行一组命令。
- 脚本编写: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的文件,敲入一下代码执行
你会发现和直接输入命令执行的是一样的
2、变量:
-
变量用于存储和操作数据,变量名一般以字母或下划线开头,并区分大小写。
-
变量赋值时不需要使用类型声明,可以直接使用等号(
=
)进行赋值。 -
通过
$
符号可以获取变量的值。 -
例如:
name="C3ting" # 定义一个名为name的变量,并赋值为"C3ting" age=25 # 定义一个名为age的变量,并赋值为25 echo $name # 输出变量name的值
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
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
三、奇妙组合
1、文件操作
-
ls
:列出目录中的文件和子目录。- 例如:
ls
、ls -l
、ls -a
。
- 例如:
-
cd
:切换当前工作目录。- 例如:
cd /path/to/directory
、cd ..
。
- 例如:
-
pwd
:显示当前工作目录的路径。 -
mkdir
:创建新目录。- 例如:
mkdir new_directory
。
- 例如:
-
rm
:删除文件或目录。- 例如:
rm file.txt
、rm -r directory
(递归删除目录)。
- 例如:
-
cp
:复制文件或目录。- 例如:
cp file.txt destination
、cp -r directory destination
(递归复制目录)。
- 例如:
-
mv
:移动文件或目录,或对文件或目录重命名。- 例如:
mv file.txt new_location
、mv old_name.txt new_name.txt
。
- 例如:
-
touch
:创建新文件或更新文件的访问和修改时间。- 例如:
touch file.txt
。
- 例如:
-
cat
:连接文件并显示其内容。- 例如:
cat file.txt
。
- 例如:
-
less
:逐页显示文件内容。- 例如:
less file.txt
。
- 例如:
-
head
:显示文件的开头部分。- 例如:
head file.txt
、head -n 10 file.txt
(显示前10行)。
- 例如:
-
tail
:显示文件的末尾部分。- 例如:
tail file.txt
、tail -n 10 file.txt
(显示最后10行)。
- 例如:
-
grep
:在文件中搜索指定模式的行。- 例如:
grep pattern file.txt
。
- 例如:
-
wc
:统计文件的行数、字数和字符数。- 例如:
wc file.txt
、wc -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
选项。