📜  Shell 脚本 - 设置命令

📅  最后修改于: 2022-05-13 01:57:27.188000             🧑  作者: Mango

Shell 脚本 - 设置命令

在本文中,我们将看到 bash 脚本中的 SET 命令。

设置命令:它用于设置或取消设置特定的标志和设置(确定脚本的行为并帮助执行任务而没有任何问题。)在 shell 环境中。它可用于更改或显示外壳属性和参数。

句法:

set -options arguments

set 命令支持以下选项:

OptionDescription
-a use to mark variables that are created or modified or created for export.
-b use to notify the termination of the job.
-e use to exit when the command exits with a non-zero status.
-fit disables the file name generation known as globbing
-hIt saves the location of the command where it got looked.
-k

It places all assignment arguments in the environment variable of a command.

Exception: It excludes all arguments that precede the command name.

-mIt enables job control
-nIt is used to read the commands.
-oIt is used for naming the option
-p

It disables the processing of the ‘$ENV’ file and also imports the shell functions.

Turned on:  when the real and effective user ids do not match.

-tIt uses to exit from the command after executing a single command
-uIt treats unset variable as an error during substitution
-vIt prints the shell input lines
-xIt prints the commands and their arguments in the same sequence as they got executed.
-BIt performs the Brace expansion by the shell
-CIt disallows the existing regular files to be overwritten
-Eused when shell functions inherit the ERR trap
-HIt enables style history substitution. It is on by default.
-Pused when during command execution we don’t want to follow the symbolic links.
-Tset this flag, this helps shell functions to inherit the DEBUG trap

为了演示 set 命令的使用,让我们使用一些 set 命令。

设置 -x 命令

此选项在命令执行时按顺序打印命令,或主要用于进行一些脚本调试。

代码:

set -x
echo Hello
echo Romy

输出:

bar
hello
Romy
+ echo bar
+ echo hello
+ echo Romy

我们可以看到命令执行后打印的命令带有“+”号。

设置 -e 命令

它在发生错误时终止执行。

代码:(没有设置-e)

echo Hello
foo
echo Romy

输出:

Hello
Romy
main.sh: line 14: foo: command not found

'foo' 是一个不存在的命令,但 bash 在第二行遇到错误后仍执行第三行。我们可以使用 set 命令来停止终止。

代码:(使用 set -e)

set -e
echo Hello
foo
echo Romy

输出:

Hello
main.sh: line 15: foo: command not found

我们可以看到第三行没有被打印,因为执行在第二行之后终止。

管道命令

Set -e 命令不适用于管道命令。

例子:

set -e
foo | echo " This is the piped command"
echo "executed"

输出:

This is the piped command
executed
main.sh: line 3: foo: command not found

我们可以看到第三行正在执行,而不是在第二行之后终止执行。

为了克服这个问题,我们必须使用'set -eo pipefail'

设置-eo pipefail

例子:

set -eo pipefail

foo | echo " This is the piped command"

echo "executed"

输出:

This is the piped command
main.sh: line 13: foo: command not found

使用 set 命令设置位置参数

它可用于为位置参数分配值。引用为 ${N} 的值的位置,其中 N 表示参数的位置。

$1 是命令后的第一个位置参数。 $2 值是第二个参数,依此类推。

例子:

set apple mango orange guava
echo $1
echo $2
echo $3
echo $4

输出:

apple
mango
orange
guava

取消设置位置参数

要取消设置位置参数,请运行 set 命令,后跟两个连字符 (set –)。

例子:

set apple mango orange guava

set --
echo $1
echo $2

echo "Hello"

输出:

Hello

我们可以看到,与打印位置参数的前两个命令相对应,没有打印任何内容。