首页 理论教育 使用set命令设置LinuxShell

使用set命令设置LinuxShell

时间:2023-11-18 理论教育 版权反馈
【摘要】:前面提到过内置命令set,它可以显示当前shell的所有变量,还可以重新设置位置参数。set的更重要的作用是设置当前shell的选项,3.9.3节提到了其中的一个选项。命令set-o的输出有两列,分别为选项名和相应的开关状态,off表示状态为关闭,on表示状态为打开。如命令set -a的作用是打开allexport,相当于set -o allexport:set +a的作用是关闭allexport,相当于set +o allexport。如果打开了allexport,在当前的shell中定义了一个新变量或者修改一个老变量时,该变量会自动被导出。

使用set命令设置LinuxShell

前面提到过内置命令set,它可以显示当前shell的所有变量,还可以重新设置位置参数。set的更重要的作用是设置当前shell的选项,3.9.3节提到了其中的一个选项。

命令set-o的输出有两列,分别为选项名和相应的开关状态,off表示状态为关闭,on表示状态为打开。只关心某一个选项是开还是关的话,可用grep命令过滤它,如:

978-7-111-48202-4-Chapter10-40.jpg

查询某个选项的开关状态,还有一种方法,格式为:

978-7-111-48202-4-Chapter10-41.jpg

条件判断命令的退出状态为0时,表示选项是开着的,为非0时,表示选项是关闭的。例如,判断allexport是否打开的脚本可以这样写:

978-7-111-48202-4-Chapter10-42.jpg

set-o后面跟选项,即可打开该选项:

978-7-111-48202-4-Chapter10-43.jpg

set+o后面跟选项,则关闭该选项:

978-7-111-48202-4-Chapter10-44.jpg

很多选项有快捷方式。如命令set -a的作用是打开allexport,相当于set -o allexport:

978-7-111-48202-4-Chapter10-45.jpg

set +a的作用是关闭allexport,相当于set +o allexport。set命令可以控制的主要选项见表10-2。

表10-2 命令set的选项

978-7-111-48202-4-Chapter10-46.jpg

(续)

978-7-111-48202-4-Chapter10-47.jpg

表中的选项较多,不一一讲解了,仅选择几个讲解一下。

解释一下选项allexport的作用。如果打开了allexport,在当前的shell中定义了一个新变量或者修改一个老变量时,该变量会自动被导出。默认地,选项allexport是关闭的,需执行export命令才能导出变量。

举例讲一下选项errexit的作用。一个脚本当中某条命令失败了,后面的命令默认会照常执行。例如,脚本errexit_1.sh的第三行是一条错误命令:(www.xing528.com)

978-7-111-48202-4-Chapter10-48.jpg

运行errexit_1.sh,脚本的第3行出错,但是第4行命令照常执行:

978-7-111-48202-4-Chapter10-49.jpg

在上面的脚本中增加set-e命令,就是打开选项errexit,得到脚本errexit_2.sh:

978-7-111-48202-4-Chapter10-50.jpg

执行errexit_2.sh,运行到出错的地方,脚本就停止了,后面的命令不再执行:

978-7-111-48202-4-Chapter10-51.jpg

选项noglob打开后则关闭路径名与文件名的通配符(noglobbing)。命令ls*默认是用来显示当前目录下所有的非隐藏文件和目录,打开选项noglob后,就不是这样了:

978-7-111-48202-4-Chapter10-52.jpg

打开选项noglob后,在ls*命令里,*不再是通配符,命令ls*试图列出名字就叫*的文件。这时可以产生一个名字就叫*的文件:

978-7-111-48202-4-Chapter10-53.jpg

在一个shellTerminal里面,按〈Ctrl+D〉键,shell就退出了。打开选项ignoreeof后,按〈Ctrl+〉键,shell窗口不会关闭,而得到“用exit离开shell”的系统提示,这时可用exit命令退出shell:

978-7-111-48202-4-Chapter10-54.jpg

选项histexpand默认是打开的,例如,!n表示历史命令中的第n条命令,!-n表示倒数第n条,!!表示最后一条(与!-1相同),!string表示以string开头的离现在最近的历史命令。

例如,先运行HISTIGNORE=history,确保命令history本身不被记入命令历史中(见表4-3),再运行history-c清空原有的历史命令。然后,依次执行ls,pwd,date,uname和whoami命令,现在命令历史如下:

978-7-111-48202-4-Chapter10-55.jpg

!!表示最后一条命令whoami,!3表示第3条命令date,!un表示以un开头的命令uname:

978-7-111-48202-4-Chapter10-56.jpg

978-7-111-48202-4-Chapter10-57.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈