首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shell | 开启debug模式

这时可以使用shell脚本中 set 指令四个参数:-e、-u、-x、-o pipefail 命令报错即返回值($?)...不为0 set -e# set -e 选项可以在脚本出现异常时候立即退出,后续命令不再执行,相当于打上了一个断点 if 判断条件里出现异常也会直接退出,如果不希望退出可以在判断语句后面加上 ||.../bin/bash set -e foo echo "hello" 执行结果 ./test.sh: line 5: foo: command not found 阻止立即退出例子# #!.../test.sh: line 5: foo: command not found hello set -o pipefail# 默认情况下 bash 只会检查管道(pipelie)操作最后一个命令返回值...,即最后一个命令返回值为 0 则判断整条管道语句是正确 如下 set -o pipefail 作用就是管道中只要有一个命令失败,则整个管道视为失败 before# #!

1.1K30

linux26-命令除错不完全指南

4-特殊管道除错 set -e 有个例外,就是不适用于管道命令。 对于管道符号组成命令,shell 只会把最后一个子命令返回值最为整个命令返回值。...也就是说,只要最后一个子命令不失败,管道命令总是会执行成功,因而set -e 也就失效了: ❯ cat > script.sh a=3 b | echo $a c=33 echo $c ^C ❯ bash...-e script.sh 3 script.sh: line 2: b: command not found 33 对此,我们可以设置-o pipefail 用来解决这种情况,只要一个子命令失败,整个管道命令就失败...: set -o errexit # -e set -o nounset # -u set -o pipefail 5-忽略错误 执行脚本时候,如果遇到不存在变量,shell 默认会忽略它: ❯...总结一下 对于严格脚本,我们可以在开头就声明 -e, -u, -o pipefail 等选项。

89420
您找到你想要的搜索结果了吗?
是的
没有找到

编写可靠 bash 脚本一些技巧

0. set -x -e -u -o pipefail 在写脚本时,在一开始(Shebang 之后)加上下面这一句,或者它缩略版,能避免很多问题,更重要是能让很多隐藏问题暴露出来: set -xeuo...如果想让管道中任意一条命令失败就退出,就要用后面提到-o pipefail 了。 加-e 有时候可能会不太方便,动不动就退出。...-u :试图使用未定义变量,就立即退出。 如果在 bash 里使用一个未定义变量,默认是会展开成一个空串。.../bash/manual/html_node/Shell-Parameter-Expansion.html -o pipefail :只要管道一个子命令失败,整个管道命令就失败。...意外退出时杀掉所有子进程 我们脚本通常会启动好多子脚本子进程,当父脚本意外退出时,子进程其实并不会退出,而是继续运行着。如果脚本是周期性运行,有可能发生一些意想不到问题。

1.2K21

两分钟学会Shell常用知识点

SHELL环境—set set是BASH内置命令,如果不提供选项给set,默认情况下会打印所有的变量函数名称值。...常用选项: -u或者-o nounset : 执行脚本时遇到不存在变量时报错,默认情况下BASH会自动忽略 set -x或者-o xtrace : 用来在运行结果之前,先输出执行那一行命令。...一般在调试脚本时候很有用 -e : 根据返回值判断命令是否运行成功。只要脚本发生错误,就终止执行。但是对于管道命令来说就不是很好用了。...因为管道命令是把最后一个命令返回值当做整理命令返回值 +e : 关闭-e选项,为了针对特殊场景,比如有些返回值为非零时候才执行脚本时候可以使用。...set -o pipefail: 只要有一个子命令失败,整个管道命令就失败了。 一般建议将以上四个删除放在BASH头部使用 #!

41220

11-1 环境中存储是什么?

一、环境中存储是什么? 0.2种数据类型 尽管 shell 在环境中存储了 2 种基本类型数据,但是在 bash 中,这 2 种类型基本上没有区别。...这 2 种数据类型分别是 环境变量 shell变量。 shell变量是由 bash 存放少量数据,环境变量就是除此之外所有其它变量。...-d  Shell预设会用杂凑表记忆使用过指令,以加速指令执行。使用-d参数可取消。 -e  若指令传回值不等于0,则立即退出shell。 -f   取消使用通配符。...-P  启动-P参数后,执行指令时,会以实际文件或目录来取代符号连接。 -t  执行完随后指令,即退出shell。 -u  当执行时使用到未定义过变量,则显示错误信息。...printenv显示版本信息并退出.png (3)小技巧 由于环境内容可能会比较冗长,所以最好将这两个命令输出以管道形式重定向到 less 命令中。

65520

Bash 脚本 set 命令教程

服务器开发管理离不开 Bash 脚本,掌握它需要学习大量细节。 set命令是 Bash 脚本重要环节,却常常被忽视,导致脚本安全性可维护性出问题。...顺便提一下,如果命令行下不带任何参数,直接运行set,会显示所有的环境变量 Shell 函数。 $ set 二、set -u 执行脚本时候,如果遇到不存在变量,Bash 默认忽略它。 #!...$ bash script.sh bash: script.sh:行4: a: 未绑定变量 可以看到,脚本报错了,并且不再执行后面的语句。 -u还有另一种写法-o nounset,两者是等价。...-e还有另一种写法-o errexit。 set -o errexit 六、set -o pipefail set -e有一个例外情况,就是不适用于管道命令。...所谓管道命令,就是多个子命令通过管道运算符(|)组合成为一个大命令。Bash 会把最后一个子命令返回值,作为整个命令返回值。

1.7K40

为什么你命令行程序没有输出

交互式模式就是在终端上执行,shell等待你输入,并且立即执行你提交命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉:登录、执行一些命令、退出。...参考bash 深入理解:交互式shell非交互式shell、登录shell非登录shell区别 解决方案 排除不需要命令 回到上面的问题,我们有一个命令行管道程序tail -f logfile...但是这样做依然是不够,比如我们无法实现对结果进行排序。这种情况下怎么办呢,我们应该总是去寻找最简单方法,或许你命令行程序已经支持非缓冲输出了呢! grep (e.g....GNU version 2.5.1) –line-buffered sed (e.g....unbufferunbuffer不是标准POSIX工具,不过不要担心,你系统中可能已经安装过它们了。

1.8K30

Bash 脚本 set 命令教程

服务器开发管理离不开 Bash 脚本,掌握它需要学习大量细节。 set命令是 Bash 脚本重要环节,却常常被忽视,导致脚本安全性可维护性出问题。...顺便提一下,如果命令行下不带任何参数,直接运行set,会显示所有的环境变量 Shell 函数。 $ set 二、set -u 执行脚本时候,如果遇到不存在变量,Bash 默认忽略它。 #!...$ bash script.sh bash: script.sh:行4: a: 未绑定变量 可以看到,脚本报错了,并且不再执行后面的语句。 -u还有另一种写法-o nounset,两者是等价。...-e还有另一种写法-o errexit。 set -o errexit 六、set -o pipefial set -e有一个例外情况,就是不适用于管道命令。...所谓管道命令,就是多个子命令通过管道运算符(|)组合成为一个大命令。Bash 会把最后一个子命令返回值,作为整个命令返回值。

1.4K50

linux学习第二十四篇:管道作业控制,shell变量,环境变量配置文件

vmstat 1 自动显示系统状态 sleep 100 可以使系统沉睡100秒 管道作业控制 管道作用:把管道符前面执行结果输出内容交给管道符后面的命令。...用户层次:用户不用登录,执行shell脚本或者打开一个bash就生效: ~/.bashrc 记录命令历史文件: ~/.bash_history 用来定义用户退出时候需要做操作(比如说用户每次退出时要删除命令历史...,那么可以把删除命令历史命令放到这个配置文件中): ~/.bash_logout PS1是在/etc/bashrc中定义,一般默认PS1是[\u@\h \W]$ ,u是用户名,h是主机名,...显示有颜色:PS1=’[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$ ’ ?...扩展 bashrcbash_profile区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/

79270

《Linux命令行与shell脚本编程大全》第十一章 构建基本脚本

注意:管道与重定向区别 (1) | 左边命令应该有标准输出,右边应该接受标准输入 (2)重定向, > 右边只能是文件,  左边命令要有标准输出   ps -e -o pcpu,pid,user,sgi_p,cmd | grep -v PID | sort -k 1n | tail -20 3. ...\///g' -e 's/20110311\(.*\)/mv & 20110310\1/g' | bash   3. ...还可以在bash计算机中赋值给变量,在bc计算机中创建变量只在bc计算机中有效,不能再shell脚本中使用 11.8 退出脚本 Shell中运行每个命令都使用退出吗告诉shell它已经运行完毕。...退出码是一个0 – 255整数值。 11.8.1 查看退出状态码 如何查看:echo &? 惯例是一个成功结束命令退出码是0,如果一个命令结束时有错误,退出状态就是正整数。

1.7K70

Unix & Linux 大学教程 学习总结

或者exit退出 10,which type whereis type 是 shell 内嵌,查看内置命令,bash 69个 help打印一些内置命令列表 11,cal -j 5 2014 查看2014...) set -/+o 显示shell选项控制(bash) 17,引用转义 使用反斜线引用单个字符(称为转义了这个字符) 使用单引号引用一串字符 使用双引号引用一串字符,但是保留$,`,\特殊意义...) |管道 2>&1 |所有输出到管道 set -o noclobber 可以禁用>,但是可以用>|(强制重写) 24,编组子shell (cd directory; command) 25,管道线分流...OK所在行) [0-9][0-9]包含两个连续数字行 -e 多条更改 -f 文件 33,正则表达式 元字符 . ^ $ \<    匹配单词开头 \>    匹配单词结尾 [abc]    匹配...b r R x X D dd u U yy yw y10w y2) y5} 10yy p P xp    调换两个字符 ddp    调换两行 deep    调换2个单词 输入模式 i a o I A

2.3K10

MAC常用终端命令行

表示当前目录下System文件; /System 在 Unix系统中区别字符大小写,A.txt 不等于 a.txt; 关键标点符号:点(.)表示当前目录;两个点(..)表示上一级目录;星号...匹配任意字符仅一次; 获得权限:为了防止误操作破坏系统,再用户状态下没有权限操作重要系统文件,先要获取root权限,语法: ,然后会提示输入密码,输入密码时没有任何回显,连星号都没有,输入完密码按回车键即可...; sudo -s 编辑文件: ,若指定路径文件不存在,则新建空文件,输入字母 i或o 进入编辑模式,编辑好内容,点击【esc】键后,输入 :w 进行保存;输入 :wq 进行保存并退出;输入...如:目录、磁盘文件、管道、网络Socket、外接USD卡等; 文件属性:用户组、读、写、执行权限; 查看文件属性 XZ:ts xz$ ls -l total 82488 -rw-r--r--@...)、o表示其他用户(other)、 a表示全部用户。

2.4K20

Linux运维基础技能: 脚本编程与Linux命令

echo $variable $* $@ 区别 $* $@ 都表示传递给函数或脚本所有参数,不被双引号(" ")包含 时,都以"$1" "$2" … "$n" 形式输出所有参数。...for var in "$*";do     echo "$var" done for var in "$@";do     echo "$var" done 区别在于,分别输出 1 2 3 1 2.../bin/bash for ip in 119.29.192.{1..255}; #批量 IP 技巧 ;仅仅在 bash 生效,sh 不行 do (     ping -c3 -W1 $ip >/dev..." while read u;do     curl -s --connect-timeout 3 -o /dev/null $u #注意几个参数使用 --silent 可以用-s     if [...else         echo "$u"" success"     fi done < $INPUT_FILE 让进程在后台可靠运行方法(意思是不会随着子 shell 退出而挂) nohup

2.8K32

shell脚本还能这么写?

, 故将$@传递给main函数 main $@ 5.set命令 内置set命令,可以改变我们脚本执行行为,让我们对脚本把握调试更强,下面是常用几种set指令,相信你会喜欢: set -...e: bash脚本遇到错误立即退出 set -n: 检查脚本语法但不执行 set -u: 遇到未设置变量立即退出 set -o pipefail: 控制在管道符执行过程中有错误立即退出 set -x:.../bin/bash set -euxo pipefail 检查bash脚本语法时,可以这样写: bash -n main.sh 6.组命令 有的时候我们有这样需求,对文本内容修改,不是简单一条命令来实现...括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令括号之间不必有空格。...name docker0 type bridge && ip addr add dev docker0 172.17.0.1/16) 7.stderr重定向至stdout 脚本开发过程中,在我们使用管道

1.3K20

Linux常见命令

管道 命令1 | 命令2 |命令n:将前一条命令执行结果通过标准输出送给后一命令作为输入数据 3....文件拥有者 g:同组 o:其他以外的人 a:三者皆是 +:增加权限 -:取消权限 =:唯一设定权限 -R:递归处理 # 更改权限 chmod +x helloWorld.sh 六....file.txt find ./ -size +100000K 2. grep [选项] [指定串] [文件] -a 文本方式搜索 -n 输出行号 -v 反向搜索 3. tar 这里要说明一点:打包压缩是不同概念...:00 ps -f 常配合grep使用 ps -ef | grep bash :找出带有bash进程 2. kill 杀死指定进程:指定PID 3. clear 清屏 4.jobs、bg、fg jobs...9. netstat n:不DNS轮询,显示IP t:显示TCP端口 u:显示UDP端口 l:仅显示套接字 p:显示进程标识符程序名称 # 查看80端口 netstat -ntp | grep 80

1.5K20

Linux进程间通信【命名管道

A 写文件,即 IPC 因为命名管道适用于独立进程间 IPC,所以无论是读端写端,进程 A、进程 B 为其分配 fd 是一致,都是 3 如果是匿名管道,因为是依靠继承才看到同一文件,所以读端写端...fd 不一样 所以 命名管道 匿名管道 还是有区别的 1.3、命名管道与匿名管道区别 不同点: 匿名管道只能用于具有血缘关系进程间通信;而命名管道不讲究,谁都可以用 匿名管道直接通过 pipe...: _tt) cout << e.first << " "; cout << "]" << endl; cout << "输入 退出 以终止程序"...bash 会等待命令输入,将输入源换成命名管道读端,再创建一个独立进程,作为命名管道写端,此时就可以实现远程遥控进程,执行不同指令 这里直接用之前写好 简易版 bash,关于 简易版 bash...具体实现可以看看这篇文章 《Linux模拟实现【简易版bash】》 步骤: 创建命名管道bash 改装,打开命名管道文件,作为 读端 创建独立进程,打开命名管道文件,作为 写端 进行 IPC,发送命令给

22920
领券