返回顶部
首页 > 资讯 > 操作系统 >Linux系统的set命令怎么用
  • 839
分享到

Linux系统的set命令怎么用

2023-06-28 16:06:06 839人浏览 八月长安
摘要

这篇文章主要讲解了“linux系统的set命令怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统的set命令怎么用”吧!set是Linux系统中用来设置shell的命令,它能

这篇文章主要讲解了“linux系统的set命令怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统的set命令怎么用”吧!

set是Linux系统中用来设置shell的命令,它能设置所使用shell的执行方式,可依照不同的需求来做设置。 set命令的参数,linux自带的说明如下:

参数说明

  • -a  标示已修改的变量,以供输出至环境变量。

  • -b  使被中止的后台程序立刻回报执行状态。

  • -C  转向所产生的文件无法覆盖已存在的文件。

  • -d  Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。

  • -e  若指令传回值不等于0,则立即退出shell。

  • -f   取消使用通配符。

  • -h  自动记录函数的所在位置。

  • -H Shell  可利用”!”加的方式来执行history中记录的指令。

  • -k  指令所给的参数都会被视为此指令的环境变量。

  • -l  记录for循环的变量名称。

  • -m  使用监视模式。

  • -n  只读取指令,而不实际执行。

  • -p  启动优先顺序模式。

  • -P  启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。

  • -t  执行完随后的指令,即退出shell。

  • -u  当执行时使用到未定义过的变量,则显示错误信息。

  • -v  显示shell所读取的输入值。

  • -x  执行指令后,会先显示该指令及所下的参数。

  • +  取消某个set曾启动的参数。

也就是说,在”set -e”之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出。有的人喜欢使用这个参数,是出于保证代码安全性的考虑。但有的时候,这种美好的初衷,也会导致严重的问题。

真实案例: 脚本a.sh开头使用了”set -e”,且能正常运行。在几个月或更久以后,因需求升级,在脚本中增加了3行hadoop操作:

 #!/bin/bash set -e ... /home/work/.../hadoop dfs -rmr /app/.../dir /home/work/.../hadoop dfs -mkdir /app/.../dir /home/work/.../hadoop dfs -put file_1 /app/.../dir/ ...123456

这几行hadoop命令逻辑很简单:在hdfs上清除并新建一个目录,并将一份本地文件推送至这个目录,供后续使用。将这几行单拎出来,在命令行下执行,除了提示待删除的目录不存在,并没有什么问题,文件还是会被推送到指定的地方。

但第一次执行这个脚本的时候,却失败退出了,且导致调用该脚本的程序整体退出,造成了严重的后果。原因是hdfs上还没有这个目录,rmr这一行会返回255,这个值被脚本前方的”set -e”捕捉到,直接导致了脚本退出。

新增的代码本身并没有问题,先删除再新建目录,反而是保证数据安全的比较规范的操作,删除命令本身的容错性,可以保证后续命令正常执行。事实是这个脚本有好几百行,且逻辑比较复杂,在增加这几行代码的时候,开发人员已经不记得这个脚本里还有个”set -e”埋伏着了。

可见设置”set -e”,在脚本开发过程中可能很有帮助,而在开发完成后,特别是对于后期可能有升级的脚本,则可能是埋下了安全隐患。

\2. set -o pipefail 对于set命令-o参数的pipefail选项,linux是这样解释的: “If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status,or zero if all commands in the pipeline exit successfully. This option is disabled by default.”

设置了这个选项以后,包含管道命令的语句的返回值,会变成最后一个返回非零的管道命令的返回值。听起来比较绕,其实也很简单

 # test.sh set -o pipefail ls ./a.txt |echo "hi" >/dev/null echo $?123

运行test.sh,因为当前目录并不存在a.txt文件,输出: ls: ./a.txt: No such file or directory 1 #设置了set -o pipefail,返回从右往左第一个非零返回值,即ls的返回值1

注释掉set -o pipefail这一行,再次运行,输出: ls: ./a.txt: No such file or directory 0 # 没有set -o pipefail,默认返回最后一个管道命令的返回值

感谢各位的阅读,以上就是“Linux系统的set命令怎么用”的内容了,经过本文的学习后,相信大家对Linux系统的set命令怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Linux系统的set命令怎么用

本文链接: https://lsjlt.com/news/320663.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux系统的set命令怎么用
    这篇文章主要讲解了“Linux系统的set命令怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统的set命令怎么用”吧!set是Linux系统中用来设置shell的命令,它能...
    99+
    2023-06-28
  • Linux常用命令set怎么用
    这篇文章给大家分享的是有关Linux常用命令set怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux常用命令set命令用于设置shell,set指令能设置所使用shell的执行方式,可依照不同的需求来...
    99+
    2023-06-28
  • linux set -e命令怎么使用
    set -e 是一个 Linux shell 命令,用于设置脚本的错误处理策略。当使用set -e命令时,如果脚本中的任何一条命令出...
    99+
    2024-04-02
  • Linux系统的cp命令怎么用
    这篇文章将为大家详细讲解有关Linux系统的cp命令怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别...
    99+
    2023-06-27
  • Linux系统的ping命令怎么用
    这篇文章主要介绍Linux系统的ping命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping...
    99+
    2023-06-27
  • Linux系统的tcpdump命令怎么用
    这篇文章主要介绍了Linux系统的tcpdump命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。tcpdump命令是基于unix系统的命令行的数据报嗅探工具,可以抓取...
    99+
    2023-06-28
  • Linux系统的seinfo命令怎么用
    这篇文章给大家分享的是有关Linux系统的seinfo命令怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。seinfo命令是用来查询SELinux的策略提供多少相关规则,一个主体进程能否读取到目标文件资源的重...
    99+
    2023-06-28
  • Linux系统的find命令怎么用
    这篇文章主要为大家展示了“Linux系统的find命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统的find命令怎么用”这篇文章吧。find 命令用来在指定目录下查找文件。...
    99+
    2023-06-28
  • linux系统的size命令怎么用
    这期内容当中小编将会给大家带来有关linux系统的size命令怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.命令简介size 用于查看目标文件、库或可执行文件中各段及其总和的大小,是 GNU 二...
    99+
    2023-06-28
  • Linux系统的locate命令怎么用
    这篇“Linux系统的locate命令怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux系统的locate命令怎...
    99+
    2023-06-28
  • Linux系统的du命令怎么用
    本篇内容介绍了“Linux系统的du命令怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!du和df是由一些差别的,du主要应用于对文件和...
    99+
    2023-06-28
  • Linux系统的awk命令怎么用
    这篇文章主要介绍“Linux系统的awk命令怎么用”,在日常操作中,相信很多人在Linux系统的awk命令怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统的awk命令怎么用”的疑惑有所帮助!...
    99+
    2023-06-28
  • Linux系统init命令怎么用
    这篇文章将为大家详细讲解有关Linux系统init命令怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。init命令是Linux操作系统下的进程初始化工具,init命令是Linux操作系统中不可缺少的程...
    99+
    2023-06-28
  • Linux系统tar命令怎么用
    小编给大家分享一下Linux系统tar命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!tar命令用于将多个文件合成1个文件,wiki中把这个命令和cpio...
    99+
    2023-06-28
  • Linux系统groupadd命令怎么用
    这篇文章主要介绍了Linux系统groupadd命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Linux系统中groupadd 命令用于创建一个新的工作组,新工作组...
    99+
    2023-06-28
  • Linux系统script命令怎么用
    这篇文章主要介绍Linux系统script命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!script 是一个神奇命令,script 能够将终端的会话过程录制下来,然后使用 scriptreplay 就可以将...
    99+
    2023-06-28
  • Linux系统last命令怎么用
    小编给大家分享一下Linux系统last命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!last是一个命令行工具,它用来展示关于系统用户最后登录会话的信息...
    99+
    2023-06-28
  • Linux系统sed命令怎么用
    这篇文章主要为大家展示了“Linux系统sed命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统sed命令怎么用”这篇文章吧。 Sed是一款流编辑工具,用来对文本进行过滤与替...
    99+
    2023-06-28
  • Linux系统sleep命令怎么用
    这篇文章将为大家详细讲解有关Linux系统sleep命令怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux系统内sleep命令很简单,就是用来实现延时的目的。语法sleep [--h...
    99+
    2023-06-28
  • Linux系统ulimit命令怎么用
    这篇文章主要为大家展示了“Linux系统ulimit命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统ulimit命令怎么用”这篇文章吧。Linux对于每个用户,系统限制其最...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作