shell 编程(8)set

set -u

在shell脚本中未定义的变量默认会忽略;然而这样会导致一些错误变量;可以在shell脚本输入set -u

set -u的作用:在脚本中出现没定义的变量的时候运行的时候会报错并且中断运行;

>不加set的时候
[root@localhost ~]# sh /root/shell_learning/set-u.sh
shark!

shark
..................................................................................................
set -u                <-------只加入这一行
echo shark!
echo $a
echo shark
--------->执行结果
[root@localhost shell_learning]# sh set-u.sh
shark!    //错误之前的还是会运行
set-u.sh: line 3: a: unbound variable

set -e

set -e 的作用:在运行脚本的时候如果脚本出现的命令有出现非零的情况就会中断、退出。

>不加set -t的时候
[root@localhost ~]# sh set-e.sh
jj
set-e.sh: line 4: foo: command not found
继续执行
............................................................................
#!/bin/sh
set -e                    <---------------只加入这一行
echo jj
foo
echo "继续执行"
-------->执行结果
[root@localhost ~]# sh set-e.sh
jj
set-e.sh: line 4: foo: command not found
  • 注意:set -e对于有管道的命令无效。要使得程序在遇到管道错误命令时候中断退出,就要配合set -o pipefail使用
    如下:
不加set -o pipefail时
#!/bin/sh
set -e
echo jj
foo |echo shark
echo "继续执行"
---------------->执行结果
[root@localhost ~]# sh set-e.sh
jj
set-e.sh: line 4: foo: command not found  #有错误还是执行了                
shark                                     
继续执行
.......................................................
#!/bin/sh
set -e
set -o pipefail   <---------只加入了这样行
echo jj
foo |echo shark
echo "继续执行"
-------------->执行结果
[root@localhost ~]# sh set-e.sh
jj
set-e.sh: line 5: foo: command not found
shark              <----不再往后执行了


set -x

查看执行的过程

#!/bin/sh
set -e
set -x                            <---------对比上面的结果可以看出差异
set -o pipefail
echo jj
foo |echo shark
echo "继续执行"
------------------->执行结果
[root@localhost shell_learning]# sh set-e.sh 
+ set -o pipefail
+ echo jj
jj
+ foo
set-e.sh: line 6: foo: command not found
+ echo shark
shark

set的所有命令都可以在命令行写
shell脚本 ------------------------>命令行
set -u -----------------------------> sh -u name.txt
set -e -----------------------------> sh -e name .txt
set -e -o pipefail----------------> sh -e -o pipefail name.txt
set -x -----------------------------> sh -x name.txt

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。