LinuxShell菜鸟教程详解

发布时间:2023-05-20

Linux Shell 学习笔记

一、基础命令

在 Linux Shell 的世界中,基础命令是我们必须要学会的,例如常见的 lsmkdircdcpmvrmtouchecho 等命令。

1、ls 命令:

ls -l

在不加参数的情况下,ls 命令为我们展示了当前目录的文件列表,而加上 -l 参数将为我们提供更为详细的信息,例如文件的权限、所有者、文件大小、创建时间等。

2、mkdir 命令:

mkdir test_dir

该命令用于在当前目录下创建一个名为 test_dir 的目录。

3、cd 命令:

cd test_dir

该命令将进入当前目录下的 test_dir 目录。

4、cp 命令:

cp test.txt test_dir/

该命令将 test.txt 文件复制到 test_dir 目录下。

5、mv 命令:

mv test.txt test_dir/

该命令将 test.txt 文件移动到 test_dir 目录下。

6、rm 命令:

rm test.txt

该命令将删除当前目录下的 test.txt 文件。

7、touch 命令:

touch test.txt

该命令用于创建一个名为 test.txt 的新文件。

8、echo 命令:

echo "Hello World"

该命令将在终端中输出 Hello World 字符串。

二、Shell 脚本

在了解基础命令之后,我们就可以开始编写 Shell 脚本了。Shell 脚本是一种在 Linux Shell 环境中运行的脚本程序,常用于编写自动执行任务、批量操作文件等自动化处理任务。

1、创建一个简单的 Shell 脚本:

#!/bin/bash
echo "Hello World"

该脚本包含了一个 echo 命令,作用是输出 Hello World 字符串。

2、运行 Shell 脚本:

chmod +x test.sh
./test.sh

我们需要先将脚本文件 test.sh 赋予执行权限,然后通过 ./ 命令运行该脚本。

三、正则表达式

正则表达式是一种灵活的字符串匹配模式,Linux Shell 中许多命令都支持正则表达式。

1、使用 grep 命令过滤文本:

grep 'hello' file.txt

该命令将在文件 file.txt 中查找包含 hello 字符串的行,并将其打印到终端中。

2、使用 sed 命令编辑文件:

sed 's/old/new/g' file.txt

该命令将在文件 file.txt 中查找 old 字符串,并将其替换为 new 字符串,所有匹配的字符串都会被替换。

四、Shell 变量

Shell 变量是我们在脚本中用于存储值的标识符,它可以是数字、文本或其他任何类型的数据。我们可以通过 Shell 脚本中定义的变量来进行不同的操作。

1、定义一个 Shell 变量:

name="Tom"
echo $name

该脚本定义了一个名为 name 的变量,并将其值设置为 Tom,在终端中运行该脚本后,将输出 Tom

2、使用环境变量:

echo $HOME

使用 $HOME 环境变量,将输出当前用户的 home 目录路径。

3、使用特殊变量:

echo $0

使用 $0 特殊变量,将输出当前脚本的名称。

4、Shell 数组:

names=("Tom" "Jerry" "Mike")
echo ${names[1]}

该脚本定义了一个名为 names 的数组,并将其值初始化为 TomJerryMike 三个数据,然后通过 ${names[1]} 命令输出该数组的第二个元素 Jerry

五、Shell 函数

Shell 函数是一段可重复使用的代码,当需要执行某些操作时,我们可以通过调用函数的方式来完成这些操作。

1、定义一个 Shell 函数:

#!/bin/bash
# 定义函数
function sayHello(){
  echo "Hello World"
}
# 调用函数
sayHello

该脚本定义了一个名为 sayHello 的函数,并在函数中定义了 echo 命令,用于输出 Hello World 字符串。在脚本的最后,我们调用了该函数,将在终端中输出 Hello World

2、定义带有参数的 Shell 函数:

#!/bin/bash
# 定义函数
function sayHello(){
  echo "Hello $1"
}
# 调用函数
sayHello "Tom"

该脚本定义了一个名为 sayHello 的函数,并在函数中定义了 echo 命令,用于输出 Hello 和函数中传入的参数。在脚本的最后,我们调用了该函数,并传入了参数 Tom,将在终端中输出 Hello Tom

六、Shell 条件判断

条件判断是我们在编写 Shell 脚本时不可避免的需求,例如我们需要在特定条件下执行特定操作,这时我们可以使用 Shell 的条件判断语句。

1、if 语句:

num=10
if [ $num -gt 5 ]; then
  echo "num is greater than 5"
fi

该脚本定义了一个名为 num 的变量,并将其值初始化为 10。然后使用 if 语句判断 num 是否大于 5,如果是,则输出 num is greater than 5

2、case 语句:

fruit="apple"
case $fruit in
  apple )
    echo "This is an apple.";;
  banana )
    echo "This is a banana.";;
esac

该脚本定义了一个名为 fruit 的变量,并将其值初始化为 apple。然后使用 case 语句对 fruit 的值进行判断,如果是 apple,则输出 This is an apple

七、Shell 循环

循环语句在编写 Shell 脚本时也是常用的语句之一,例如我们需要对某些操作进行多次重复执行,这时我们就需要使用循环语句。

1、while 循环:

count=0
while [ $count -lt 5 ]
do
  echo "Current count is: $count"
  count=`expr $count + 1`
done

该脚本定义了一个名为 count 的变量,并将其值初始化为 0,然后使用 while 循环对 count 进行迭代,每次迭代输出 Current count is: 和当前的 count 值。

2、for 循环:

names=("Tom" "Jerry" "Mike")
for name in ${names[@]}
do
  echo "Hello $name"
done

该脚本定义了一个名为 names 的数组,并将其值初始化为 TomJerryMike 三个数据。然后使用 for 循环输出 Hello 和数组中的每个元素。

八、Shell 并发编程

当我们涉及到多个任务需要同时执行时,我们就需要使用到 Shell 并发编程技术,以提高代码的效率。

1、& 符号:

#!/bin/bash
# 运行任务1
task1(){
  echo "This is task1."
  sleep 5
}
# 运行任务2
task2(){
  echo "This is task2."
  sleep 5
}
# 运行任务3
task3(){
  echo "This is task3."
  sleep 5
}
# 并发运行任务
task1 &
task2 &
task3 &

该脚本定义了三个名为 task1task2task3 的函数,每个函数都包含一个输出语句和 5 秒的睡眠时间。在脚本的最后,我们使用 & 符号来并发运行三个函数。

九、Shell 输入输出重定向

Shell 输入输出重定向是我们在 Shell 编程中常用的技术之一,例如我们需要将命令的输出结果保存到文件中,或者从文件中读取输入等操作,都需要用到输入输出重定向技术。

1、输出重定向:

echo "Hello World" > file.txt

该命令将输出 Hello World 字符串,并将其重定向到文件 file.txt 中。

2、输入重定向:

cat < file.txt

该命令将从文件 file.txt 中读取数据,并输出到终端中。

十、Shell 管道

Shell 管道是我们另外一个常用的技术,通过将一个命令的输出结果传递给另一个命令来完成一系列的操作,以实现更加复杂的任务。

1、使用管道过滤数据:

cat file.txt | grep "Hello"

该命令将从文件 file.txt 中读取数据,然后将其传递给 grep 命令(也就是将包含 Hello 字符串的行输出到终端中)。

2、使用管道排序数据:

cat file.txt | sort

该命令将从文件 file.txt 中读取数据,然后将其传递给 sort 命令(也就是将文件内容按行排序输出到终端中)。

十一、Shell 网络编程

在需要与外部服务器或者其他设备进行交互时,我们就需要使用到 Shell 网络编程技术,以完成网络通讯等任务。

1、使用 telnet 与远程服务器进行交互:

telnet www.baidu.com 80

该命令将连接到百度服务器并打开 80 端口,在终端中可以进行与该服务器的交互操作。

2、使用 curl 下载文件:

curl -O http://example.com/file.zip

该命令将从指定网址下载一个名为 file.zip 的文件。

十二、Shell 常用工具

除了 Shell 自带的命令和组件外,还有一些社区或第三方提供的库和工具,我们可以使用这些工具来完成更加复杂的任务。

1、使用 awk 命令进行文本处理:

awk '{print $1}' file.txt

该命令将从文件 file.txt 中读取数据,并使用 awk 命令将每一行的第一个单词提取出来,输出到终端中。

2、使用 sed 命令编辑文件:

sed 's/old/new/g' file.txt

该命令将在文件 file.txt 中查找 old 字符串,并将其替换为 new 字符串,所有匹配的字符串都会被替换。