Shell 脚本 - 设置命令
在本文中,我们将看到 bash 脚本中的 SET 命令。
设置命令:它用于设置或取消设置特定的标志和设置(确定脚本的行为并帮助执行任务而没有任何问题。)在 shell 环境中。它可用于更改或显示外壳属性和参数。
句法:
set -options arguments
set 命令支持以下选项: It places all assignment arguments in the environment variable of a command. Exception: It excludes all arguments that precede the command name. 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.Option Description -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. -f it disables the file name generation known as globbing -h It saves the location of the command where it got looked. -k -m It enables job control -n It is used to read the commands. -o It is used for naming the option -p -t It uses to exit from the command after executing a single command -u It treats unset variable as an error during substitution -v It prints the shell input lines -x It prints the commands and their arguments in the same sequence as they got executed. -B It performs the Brace expansion by the shell -C It disallows the existing regular files to be overwritten -E used when shell functions inherit the ERR trap -H It enables style history substitution. It is on by default. -P used when during command execution we don’t want to follow the symbolic links. -T set 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
我们可以看到,与打印位置参数的前两个命令相对应,没有打印任何内容。