Bootstrap

shell脚本_不同脚本的互相调用和重定向操作

目录

一、 不同脚本的互相调用

1.直接调用

2.使用 source 或 . 命令

3.使用 bash 命令调用

4.传递参数给脚本

二、 重定向操作

1.输出重定向(>)

2.追加输出(>>)

3.输入重定向(<)

4.错误输出重定向(2>)

5.同时重定向标准输出和标准错误

三、文件描述符

1.重定向文件描述符

2.使用 exec 进行更复杂的重定向

本章总结


学习视频泷羽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 脚本知识,特别是脚本调用和重定向操作,将大大提高你在系统管理和自动化任务中的工作效率,使你能够更灵活地处理脚本之间的数据交换和错误处理。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;