admin 管理员组

文章数量: 887021


2024年1月22日发(作者:mvc模式与三层架构的关系)

Linux Shell Bash 选项

选项用来更改shell和脚本的行为.

set命令用来打开脚本中的选项. 你可以在脚本中任何你想让选项生效的地方插入set -o option-name, 或者使用更简单的形式, set -option-abbrev. 这两种形式是等价的.

1 #!/bin/bash

2

3 set -o verbose

4 # 打印出所有执行前的命令.

5

1 #!/bin/bash

2

3 set -v

4 # 与上边的例子具有相同的效果.

5

如果你想在脚本中禁用某个选项, 可以使用set +o option-name或set

+option-abbrev.

1 #!/bin/bash

2

3 set -o verbose

4 # 激活命令回显.

5 command

6 ...

7 command

8

9 set +o verbose

10 # 禁用命令回显.

11 command

12 # 没有命令回显了.

13

14

15 set -v

16 # 激活命令回显.

17 command

18 ...

19 command

20

21 set +v

22 # 禁用命令回显.

23 command

24

25 exit 0

26

还有另一种可以在脚本中启用选项的方法, 那就是在脚本头部, #!的后边直接指定选项.

1 #!/bin/bash -x

2 #

3 # 下边是脚本的主要内容.

4

也可以从命令行中打开脚本的选项. 某些不能与set命令一起用的选项就可以使用这种方法来打开. -i就是其中之一, 这个选项用来强制脚本以交互的方式运行.

bash -v script-name

bash -o verbose script-name

下表列出了一些有用的选项. 它们都可以使用缩写的形式来指定(开头加一个破折号), 也可以使用完整名字来指定(开头加上双破折号, 或者使用-o选项来指定).

表格 30-1. Bash选项

缩写

-C

-D

-a

-b

-c ...

名称 作用

列出用双引号引用起来的, 以$为前缀的字符串,

但是不执行脚本中的命令

当后台运行的作业终止时, 给出通知(脚本中并不常见)

从...中读取命令

当脚本发生第一个错误时, 就退出脚本, 换种说法就是, 当一个命令返回非零值时, 就退出脚本(除了until或while loops, if-tests, list

constructs)

禁用文件名扩展(就是禁用globbing)

noclobber 防止重定向时覆盖文件(可能会被>|覆盖)

(none)

allexport export(导出)所有定义过的变量

notify

(none)

-e errexit

-f

-i

noglob

interactive 让脚本以交互模式运行

-n noexec 从脚本中读取命令, 但是不执行它们(做语法检查)

调用Option-Name选项

修改Bash或被调用脚本的行为, 使其符合POSIX标准.

-o

(none)

Option-Name

-o posix

-p

-r

-s

-t

-u

-v

-x

-

--

POSIX

privileged 以"suid"身份来运行脚本(小心!)

restricted 以受限模式来运行脚本(参考 21).

stdin

(none)

nounset

verbose

xtrace

(none)

(none)

从stdin中读取命令

执行完第一个命令之后, 就退出

如果尝试使用了未定义的变量, 就会输出一个错误消息, 然后强制退出

在执行每个命令之前, 把每个命令打印到stdout上

与-v选项类似, 但是会打印完整命令

选项结束标志. 后面的参数为位置参数.

unset(释放)位置参数. 如果指定了参数列表(--

arg1 arg2), 那么位置参数将会依次设置到参数列表中.

使用内置的set和shopt命令设置bash选项

set命令可以用来定制shell环境,使用选项“o”来打开或者关闭选项。例如打开选项:set -o 选项,关闭选项目:set +o 选项。

例如要打开vi交互式命令行编辑,则如下:

[root@localhost ~]# set -o #查看当前设置情况

allexport off

braceexpand on

emacs on

errexit off

errtrace off

functrace off

hashall on

histexpand on

history on

ignoreeof off

interactive-comments on

keyword off

monitor on

noclobber off

noexec off

noglob off

nolog off

notify off

nounset off

onecmd off

physical off

pipefail off

posix off

privileged off

verbose off

vi off #关闭中

xtrace off

[root@localhost ~]# set -o vi #把vi选项打开

[root@localhost ~]# set -o #查看当前设置情况

allexport off

braceexpand on

emacs off

errexit off

errtrace off

functrace off

hashall on

histexpand on

history on

ignoreeof off

interactive-comments on

keyword off

monitor on

noclobber off

noexec off

noglob off

nolog off

notify off

nounset off

onecmd off

physical off

pipefail off

posix off

privileged off

verbose off

vi on #已经打开

xtrace off

内置set命令选项

选项名

allexport

braceexpand

emacs

errexit

histexpand

history

ignoreeof

keyword

monitor

noclobber

noexec

noglob

notify

nounset

onecmd

physical

privileged

verbose

vi

xtrace

快捷含义

开关

-a

-B

-e

-H

-k

-m

-C

-n

-d

-b

-u

-t

-P

-p

-v

-x

从这个选项中被设置开始就自动标明要输出的新变量的变量,直至选项被复位

打开花括号扩展,它是一个默认设置

使用emacs内置编辑器进行命令行编辑,是一个默认当命令返回一个非零退出状态(失败)时退出。读取件时不设置

执行历史替换时打开!和!!扩展,是一个默认设置

打开命令行历史、默认为打开

禁止用EOF(Ctrl+D)键退出shell。必须键入exit才等价于设置shell变量IGNOREEOF=10

将关键字参数放到命令的环境中

对于交互式shell,把#符后面的文本作为注释

设置作业控制

防止文件在重定向时被重写

读命令,但不执行。用来检查脚本的语法。交互式运启

禁止用路径名扩展。即关闭通配符

后台作业完成时通知用户

扩展一个未设置的变量时显示一个错误信息

在读取和执行命令后退出

设置时,在键入cd或pwd禁止符号链接。用物理目设置后,shell不读取.profile或ENV文件,且不从shell函数,将自动为setuid脚本开启特权

为调试打开verbose模式

使用vi内置编辑器进行命令行编辑

为调试打开echo模式

interactive-comments

shopt命令是set命令的一种替代,很多方面都和set命令一样,但它增加了很多选项。可有使用“-p”选项来查看shopt选项的设置。“-u”开关表示一个复位的选项,“-s”表示选项当前被设置。

[root@localhost ~]# shopt -p #查看当前设置情况

shopt -u cdable_vars

shopt -u cdspell

shopt -u checkhash

shopt -s checkwinsize

shopt -s cmdhist

shopt -u dotglob

shopt -u execfail

shopt -s expand_aliases

shopt -u extdebug

shopt -u extglob

shopt -s extquote

shopt -u failglob

shopt -s force_fignore

shopt -u gnu_errfmt

shopt -u histreedit

shopt -u histappend

shopt -u histverify

shopt -s hostcomplete

shopt -u huponexit

shopt -s interactive_comments

shopt -u lithist

shopt -s login_shell

shopt -u mailwarn

shopt -u no_empty_cmd_completion

shopt -u nocaseglob

shopt -u nullglob

shopt -s progcomp

shopt -s promptvars

shopt -u restricted_shell

shopt -u shift_verbose

shopt -s sourcepath

shopt -u xpg_echo

[root@localhost ~]# shopt -s cdspell #把cdspell选项打开

[root@localhost ~]# shopt -p cdspell #打印cdspell设置

shopt -s cdspell

[root@localhost ~]# cd /raot #故意拼写错误

/root

[root@localhost ~]# pwd #查看当前目录

/root

[root@localhost ~]# cd /usr/loca/bin #故意拼写错误

/usr/local/bin

[root@localhost bin]# pwd #查看当前目录

/usr/local/bin

[root@localhost bin]# shopt -u cdspell #把cdspell选项打开

[root@localhost bin]# shopt -p cdspell #打印cdspell设置

shopt -u cdspell

[root@localhost bin]# cd /raot #故意拼写错误

-bash: cd: /raot: 没有那个文件或目录 #进入目录错误

shopt命令选项

选项

cdable_vars

含义

如果给cd内置命令的参数不是一个目录,就假设它是一个变量的值是将要转换到的目录

纠正cd命令中目录名的较小拼写错误。检查的错误包括颠字符,遗漏的字符以及重复的字符。如果知道一处修改,正就打印出,命令将继续。只用于交互式shell

bash在试图执行一个命令前,先在哈希表中寻找,以确定命在。如果命令不存在,就执行正常路径搜索

bash在每个命令后检查窗口大小,如果有必要,就更新LICOLUMNS的值

bash试图将一个多行命令的所有行保存在同一个历史项中行命令的重新编辑更方便

bash在文件名扩展的结果中包括以点(.)开头的文件名

如果一个交互式shell不能执行指定给exec内置命令作为件,它不会退出。如果exec失败,一个交互式shell不会别名被扩展。默认为打开

打开扩展的模式匹配特征(正常的表达式元字符来自Korn文件名扩展)

当shell退出时,历史清单将添加到以HISTFILE变量的值件中,而不是覆盖文件

如果readline正被使用,用户有机会重新编辑一个失败的如果设置,且readline正被使用,历史替换的结果不会立shell解析器。而是将结果行装入readline编辑缓冲区中,步修改

如果设置,且readine正被使用,当正在完成一个包含@的将试图执行主机名补全。默认为打开

如果设置,当一个交互式登陆shell退出时,bash将发送一(挂起信号)给所有的作业

cdspell

checkhash

checkwinsize

cmdhist

dotglob

execfail

expand_aliases

extglob

histappend

histreedit

histverify

hostcomplete

huponexit

在一个交互式shell中,允许以#开头的词以及同一行中其interactive_comments

被忽略。默认为打开

lithist

mailwarn

如果打开,且cmdhist选项也打开,多行命令将用嵌入的换到历史中,而无需在可能的地方用分号来分隔

如果设置,且bash用来检查邮件的文件自从上次检查后已

将显示消息“The mail in mailfile has been read”

nocaseglob

nullglob

promptvars

restricted_shell

如果设置,当执行文件名扩展时,bash在不区分大小写的方式下匹配文件名

如果设置,bash允许没有匹配任何文件的文件名模式扩展成一个空串,而不是它们本身

如果设置,提示串在被扩展后再经历变量和参量扩展。默认为打开

如果shell在受限模式下启动就设置这个选项。该值不能被改变。当执行启动文件时,不能复位该选项,允许启动文件发现shell是否是受限的

如果设置,source内置命令使用PATH的值来寻找包含作为参数提供的文件的目录。默认为打开

点(.)的同义词

如果该选项设置,当移动计数超过位置参量个数时,shift内置命令将打印一个错误消息

sourcepath

source

shift_verbose


本文标签: 选项 命令 脚本 设置 打开