目录
学习视频泷羽sec:shell编程(完结)_哔哩哔哩_bilibili
一、 不同脚本的互相调用
Shell 脚本可以通过几种方式调用其他脚本或命令:
1.直接调用
我们可以直接在一个脚本中调用另一个脚本,方法是提供脚本路径或脚本名称。如果另一个脚本在当前目录下并且有执行权限,可以直接调用。
#initiate.sh
echo 'Hello,world'
#other_script.sh
# 调用其他脚本
./initiate.sh
但是很明显这种方式是需要initiate.sh拥有被执行权限的。
2.使用 source
或 .
命令
source
命令或者 .
(点命令)可以在当前 Shell 环境中执行另一个脚本,而不会启动一个新的子进程。这意味着如果被调用的脚本修改了环境变量或其他设置,这些修改会影响当前脚本。
#initiate.sh
name=Tom
age=18
#other_script.sh
# 使用 source 或 . 来执行脚本
source initiate.sh
echo "Hello, my name is $name and I am $age years old"
# 或者
. initiate.sh
这种方式通常用于共享函数、变量或环境设置等。
3.使用 bash
命令调用
我们也可以通过 bash
命令调用另一个脚本,并启动一个新的子 Shell 来执行脚本。
#initiate.sh
echo 'Hello,world'
#other_script.sh
# 调用其他脚本
bash initiate.sh
这种方式和直接调用的区别是,不需要执行权限,直接通过bash解释器来调用sh脚本。
4.传递参数给脚本
在调用其他脚本时,可以传递参数,接收脚本中的 $1
, $2
, … 等位置参数。
#initiate.sh
echo "Hello, my name is $1 and I am $2 years old"
#other_script.sh
bash initiate.sh ikun 2.5
在 initiate.sh
中,可以通过 $1
, $2
等获取传递的参数。
二、 重定向操作
重定向是 Shell 脚本中非常重要的功能,它用于将命令的输入输出重定向到文件或其他命令中,从而实现更灵活的控制。
1.输出重定向(>
)
将命令的标准输出重定向到指定的文件中。如果文件存在,重定向会覆盖文件内容;如果文件不存在,则会创建该文件。
echo "Hello, World!" > output.txt
2.追加输出(>>
)
将命令的标准输出追加到指定文件的末尾,而不会覆盖文件原有内容。
echo "My name is ikun and I am 2.5 years old" >> output.txt
3.输入重定向(<
)
将文件的内容作为命令的输入。例如,可以通过重定向从文件中读取输入,而不需要通过标准输入。
sort < input.txt
4.错误输出重定向(2>
)
将标准错误(stderr)输出重定向到文件中。标准错误通常用于显示错误信息。
ikun 2> error.log
5.同时重定向标准输出和标准错误
有时我们需要将标准输出和标准错误都重定向到同一个文件。可以通过以下方式:
ikun > output.txt 2>&1
这将同时将标准输出和标准错误输出重定向到 output.txt
文件中。
三、文件描述符
在 Shell 脚本中,文件描述符 是对输入输出流的抽象。Shell 默认有三个文件描述符:
-
标准输入(stdin):文件描述符
0
,通常用于接收来自键盘或文件的输入。 -
标准输出(stdout):文件描述符
1
,通常用于输出到终端或文件。 -
标准错误(stderr):文件描述符
2
,通常用于输出错误信息。
文件描述符使得我们能够灵活控制输入输出流。可以通过以下方式进行更复杂的输入输出操作:
1.重定向文件描述符
通过重定向文件描述符,可以将标准输入、输出或错误输出指向其他文件或设备。
-
将标准输出重定向到文件:
echo "This is an info message" > output.txt
-
将标准错误输出重定向到文件:
ikun 2> error.log
-
同时将标准输出和标准错误输出重定向到同一个文件:
ikun > output.log 2>&1
在上面演示过了,就不再贴图了。
2.使用 exec
进行更复杂的重定向
exec
命令可以在脚本中为特定文件描述符分配新的文件。
例如,以下命令会将文件描述符 3
重定向到文件 myfile.log
:
exec 3> myfile.log
echo "This goes to myfile.log" >&3
关闭文件描述符:如果不再需要某个文件描述符,可以使用 exec
来关闭它。
exec 3>&-
本章总结
-
脚本调用:Shell 脚本可以通过多种方式调用其他脚本或命令,最常见的方式包括直接调用、使用
source
命令以及通过bash
启动新子进程。 -
重定向操作:通过重定向,Shell 可以将输入输出流定向到文件或其他命令,从而实现灵活的数据流控制。
-
文件描述符:Shell 中的文件描述符为我们提供了更细粒度的控制,可以单独控制标准输入、标准输出和标准错误输出,以及在脚本中进行复杂的重定向操作。
掌握这些基础的 Shell 脚本知识,特别是脚本调用和重定向操作,将大大提高你在系统管理和自动化任务中的工作效率,使你能够更灵活地处理脚本之间的数据交换和错误处理。