专栏首页MyPanda的学习笔记Linux中set命令设置位置参数

Linux中set命令设置位置参数

set 是Linux 的内置命令,这是一个非常有用的命令,只是可能因为不熟悉,所以就不怎么用,如果你看一些比较成熟的shell scripts, 经常会看到用set的地方,本文对set命令的-e , — option 做一些简单讲解:

[root@localhost bin]# help set | tail
          The -x and -v options are turned off.

    Using + rather than - causes these flags to be turned off.  The
    flags can also be used upon invocation of the shell.  The current
    set of flags may be found in $-.  The remaining n ARGs are positional
    parameters and are assigned, in order, to $1, $2, .. $n.  If no
    ARGs are given, all shell variables are printed.

    Exit Status:
    Returns success unless an invalid option is given.
[root@localhost bin]#

从上面set的帮助可以看到, “+” ,"-" 分别用于关闭或者打开某些特性;具体的特性有很多,这里介绍 -e 特性: set -e ; 表示后续所有的bash 命令的返回code 如果不是0,那么脚本立即退出,后续的脚本将不会得到执行的机会; set +e ; 这个是默认的状态,表示就算后续的命令如果返回值不是0,那么脚本依然向下执行; 所以 set -e其实就是从设置的位置起,给脚本的每一条命令加上了同一个退出条件;而set +e 则是取消这种设置; 看下面的例子:

[root@localhost shell_commands]# cat test.sh
#!/bin/bash
function lookupstr(){
grep "sles"  /etc/os-release >/dev/null 2>&1
if [ "$?" -ne 0 ];then
    echo -e "Can not find the 'sles' string in file.\n"
fi
}

echo "Below results based on: set +e"
set +e
lookupstr

echo "Below results based on: set -e"
set -e
lookupstr
[root@localhost shell_commands]# ./test.sh
Below results based on: set +e
Can not find the 'sles' string in file.

Below results based on: set -e
[root@localhost shell_commands]#

set 除了上面的-e option 可以帮助优化脚本外,其"--" option 更有用: 在调用shell脚本的时候,通常传递参数给shell脚本,这些参数叫做位置参数,那么有没有可能在没有用shell脚本的时候也使用位置参数呢? 这时候就可以用 "--" option来实现:

[root@localhost ~]# help set
      --  Assign any remaining arguments to the positional parameters.
          If there are no remaining arguments, the positional parameters
          are unset.
[root@localhost ~]#
[root@localhost ~]# echo $@
[root@localhost ~]# set -- p1 p2 -host -4
[root@localhost ~]# echo $@
p1 p2 -host -4
[root@localhost ~]# echo $1,$2,$3,$4
p1,p2,-host,-4
[root@localhost ~]#

本文原创,转载请注明出处.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • sed的pattern space与hold space应用举例

    对于常常使用的sed命令,我们需要知道如下的内容,才能更好的使用它: A. 模式空间: sed 在处理每一行的时候,首先会把要处理的行存入到模式空间里面;然...

    qsjs
  • sed与awk处理区间匹配的问题总结---1

    正常情况下,将要处理的行读入pattern space(缓存的一种),然后在pattern space中进行处理,然后再将pattern space中的内容取回...

    qsjs
  • awk数组的两条实用技巧(去重,统计)

    说到数组,一般下标都是从0开始,然后递增;而awk的数组的下标可以是 任意内容,比如下面的例子:

    qsjs
  • C++ STL之set的基本操作

    set是集合,虽然也存在键值和实值,不过两者根本就是同一个值,键值的设置完全就是为了满足红黑树的底层结构,set操作与map很像不过也有些不同。 1、 set迭...

    用户1215536
  • Entity Framework 4.1 Code-First 学习笔记

      CodeFirst提供了一种先从代码开始工作,并根据代码直接生成数据库的工作方式。Entity Framework 4.1在你的实体不派生自任何基类、不添加...

    thz
  • TCP 粘包拆包

    粘包拆包是TCP协议传输中一种现象概念。TCP是传输层协议,他传输的是“流”式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心。它只是根据缓冲区状况将数...

    WindWant
  • 编程小白 | 每日一练(142)

    这道理放在编程上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从编程小白进阶到高手,需要经历的是日积月累的学习,那么如何学习呢?当然是每天都...

    C语言入门到精通
  • 一起用golang之Go程序的套路

    系统性地介绍golang基础的资料实在太多了,这里不再一一赘述。本文的思路是从另一个角度来由浅入深地探究下Go程序的套路。毕竟纸上得来终觉浅,所以,能动手就不要...

    李海彬
  • [PHP] 原型模式-创建型设计模式

    通过创建一个原型对象,然后复制原型对象来避免通过标准的方式创建大量的对象产生的开销(new Foo())。

    陶士涵
  • Vim - python autocom

    下载地址:http://vim.sourceforge.net/scripts/script.php?script_id=850

    py3study

扫码关注云+社区

领取腾讯云代金券