Linux Shell 学习笔记
一、基础命令
在 Linux Shell 的世界中,基础命令是我们必须要学会的,例如常见的 ls
、mkdir
、cd
、cp
、mv
、rm
、touch
、echo
等命令。
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
的数组,并将其值初始化为 Tom
、Jerry
、Mike
三个数据,然后通过 ${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
的数组,并将其值初始化为 Tom
、Jerry
、Mike
三个数据。然后使用 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 &
该脚本定义了三个名为 task1
、task2
、task3
的函数,每个函数都包含一个输出语句和 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
字符串,所有匹配的字符串都会被替换。