set -u 就用来改变这种行为。脚本在头部加上它,遇到不存在的变量就会报错,并停止执行。 #!/usr/bin/bash set -u echo $a echo bar 运行结果如下。...-u 还有另一种写法 -o nounset,两者是等价的。 set -o nounset (4)脚本执行时打印出命令。 默认情况下,脚本执行后,屏幕只显示运行结果,没有其他内容。...set -o xtrace 5.选项名 执行环境的不同配置有对应的名称,一般与 set 选项也有对应的关系。...用来检查脚本的语法。交互式运行时不开启 noglob -d 禁止用路径名扩展。...即关闭通配符 notify -b 后台作业完成时通知用户 nounset -u 扩展一个未设置的变量时显示一个错误信息 onecmd -t 在读取和执行命令后退出 physical -P 设置时,在键入
hello world $ echo -e 'hello \n world' hello world 3、printf:显示格式字符串,类似于c中的printf函数 格式:printf “格式字符串” 参数...,加入选项可以设置bash的某个属性是否打开 例子: $set -o 查看所有属性,或打开某个属性 allexport off braceexpand on emacs...a.c 可用set +C 取消 set -u:用于测试变量是否存在 例如: : $i echo $?...同样,可以用set +u取消作用 set -v:显示当前shell的每一个执行命令,换句话说,就是把执行的命令打印出来 例如: kelvin@kelvin-Founder:~$ set -v kelvin...-s:开启选项 -u:关闭选项 -o:set -o -q:以返回值的形式表示开关状态,非0表示关,0表示开 set和shopt 的细节参见: http://blogold.chinaunix.net/u3
一共有十几个参数可以定制,官方手册有完整清单,本文介绍其中最常用的四个。 顺便提一下,如果命令行下不带任何参数,直接运行set,会显示所有的环境变量和 Shell 函数。...$ set 二、set -u 执行脚本的时候,如果遇到不存在的变量,Bash 默认忽略它。 #!...set -u就用来改变这种行为。脚本在头部加上它,遇到不存在的变量就会报错,并停止执行。 #!/usr/bin/env bash set -u echo $a echo bar 运行结果如下。...-u还有另一种写法-o nounset,两者是等价的。 set -o nounset 三、set -x 默认情况下,脚本执行后,屏幕只显示运行结果,没有其他内容。...set -e根据返回值来判断,一个命令是否运行失败。但是,某些命令的非零返回值可能不表示失败,或者开发者希望在命令失败的情况下,脚本继续执行下去。
检查命令没有问题,查看日志也没有问题。...main_net_config.conf' saved [17180/17180] 各种验证后,可以确定不是 Dockerfile 的问题,日志也是提示 saved,大概率是docker的问题,各种找解决方法 有问题的写法...FROM centos7/centos7 ENV TMP_DIR="/build" ENV JDK_TAR="jdk-8u202-linux-x64.tar.gz" ENV JDK_DIR="jdk1.8.0..._202" ENV JDK_MD5="0029351f7a946f6c05b582100c7d45b7" ENV BASE_DIR="/java" RUN set -o errexit -o nounset..._202" ENV JDK_MD5="0029351f7a946f6c05b582100c7d45b7" ENV BASE_DIR="/java" RUN set -o errexit -o nounset
/bin/bash # 若命令失败让脚本退出 set -o errexit # 若未设置的变量被使用让脚本退出 set -o nounset echo "Names without double quotes...因此用下面行的方式去通知 bash 当它尝试去用一个未声明变量时就退出脚本执行: # 若有用未设置的变量即让脚本退出执行 set -o nounset # 或 set -u 举例: VAR_NO_DEFINE.../bin/bash # 若命令失败让脚本退出 set -o errexit # 若未设置的变量被使用让脚本退出 set -o nounset echo "Names without double quotes.../bin/bash # 若命令失败让脚本退出 set -o errexit # 若未设置的变量被使用让脚本退出 set -o nounset echo "Names without double quotes...通过阅读下面给出的指南来掌握此技巧 Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行
用下面的行的方式在遇到命令失败时来退出脚本执行: # 如果命令运行失败让脚本退出执行 set -o errexit # 或 set -e 3、 当 Bash 用未声明变量时使脚本退出 Bash 也可能会使用能导致起逻辑错误的未声明的变量...因此用下面行的方式去通知 bash 当它尝试去用一个未声明变量时就退出脚本执行: # 若有用未设置的变量即让脚本退出执行 set -o nounset # 或 set -u 4、 使用双引号来引用变量.../bin/bash # 若命令失败让脚本退出 set -o errexit # 若未设置的变量被使用让脚本退出 set -o nounset echo "Names without double quotes...通过阅读下面给出的指南来掌握此技巧: 1、如何在 Linux 中启用 Shell 脚本调试模式(https://linux.cn/article-8028-1.html) 2、如何在 Shell 脚本中执行语法检查调试模式...linux.cn/article-8045-1.html) 3、如何在 Shell 脚本中跟踪调试命令的执行(https://linux.cn/article-8120-1.html) 本文到这就结束了,你是否有一些其他更好的
set是BASH内置的命令,如果不提供选项给set,默认情况下会打印所有的变量和函数的名称和值。...常用的选项: -u或者-o nounset : 执行脚本时遇到的不存在的变量时报错,默认情况下BASH会自动忽略 set -x或者-o xtrace : 用来在运行结果之前,先输出执行的那一行命令。...一般在调试脚本时候很有用 -e : 根据返回值判断命令是否运行成功。只要脚本发生错误,就终止执行。但是对于管道命令来说就不是很好用了。.../bin/bash set -eux set -p pipefail${YOUR_COMMAND} Shell中的变量 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。...n 是一个数字,表示第几个参数。例如,第一个参数是,第二个参数是2。 $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。
var is empty} -bash: tmp_file: var is empty (2)人肉判断变量是否为空: [[ ${tmp_file} == "" ]] && echo 1 1 [[ -z...${tmp_file} ]] && echo 1 1 (3)如果变量未定义还可以开启 set 选项: # cat a.sh # 若有用未设置的变量即让脚本退出执行 # set -o nounset...# 或 set -u b= echo $b echo $a echo 1 # bash a.sh a.sh: line 4: a: unbound variable # 另外, # 如果命令运行失败让脚本退出执行...(1)良好的编程习惯:变量加引号防止扩展 path="/usr/local /sbin" # rm -rf $path rm -rf "$path" (2)对变量进行语义检查 比如检测是否含有空格等特殊字符.../blog/2017/11/bash-set.html
(示例:sh master.sh 192.168.121.140 10.254.10.2) 第一个参数为master ip; 第二个参数为集群DNS组件Cluster ip,我用的是10.254.10.2.../bin/bash set -o errexit set -o nounset set -o pipefail echo "===================This node is a master.../bin/bash set -o errexit set -o nounset set -o pipefail MASTER_ADDRESS=$1 #配置文件地址 KUBE_CFG_DIR="/etc.../bin/bash set -o errexit set -o nounset set -o pipefail #关闭selinux和firewalld echo '==================.../bin/bash set -o errexit set -o nounset set -o pipefail MASTER_ADDRESS=$1 NODE_ADDRESS=$2 CLUSTER_DNS
/bin/bash set -o nounset set -o errexit 这会处理两个常见的错误: 引用未定义的变量(默认是””) 忽略执行失败的命令 这两个设置是有对应快捷写法的(”-u”和”-...# = "path1/path2" # greedy deletion at end root="${f%%/*}" # = "path1" 避免使用临时文件 一些命令使用文件名作为参数...parameter list and white-space within parameters correctly @ should usually be quoted like so " 调试 对脚本进行语法检查...-o verbose和set -o xtrace来永久指定-x和-v。...另外,本文有很多国人翻译了,译者在翻译本文时有一些翻译参考了《Bash脚本15分钟进阶教程》(http://www.vaikan.com/bash-scripting/),这篇翻译质量很高,我个人学习和借鉴了很多
#13; mso-paper-source:0;} div.Section1 {page:Section1;} --> ⒉设置 Bash 选项: ⑴ set...等价于设置shell变量IGNOREEOF=10 interactive-comments 对于交互式shell,把#符后面的文本作为注释 keyword -k 将关键字参数放到命令的环境中 monitor...用来检查脚本的语法。交互式运行时不开启 noglob -f 禁止用路径名扩展。...即关闭通配符 nolog notify -b 后台作业完成时通知用户 nounset -u 扩展一个未设置的变量时显示一个错误信息 onecmd -t 在读取和执行命令后退出 physical -P
一天,我在为第三年的操作系统课程准备一个程序。我的一个小程序报告没有错误,当我运行它时,黑白色的桌面上出现了竖条, 我的软盘被退出来了,计算机然后从新启动。...经过更仔细的检查,我意识到我在 if 语句中使用了不正确的判断符号“ = ”,应该是“ == ”。...这个小错误导致了不可以预见的结果,从那时起,我将 C 语言当做一个有精神病的室友,我们可以一起生活、一起工作,但是只要你一不注意它,他就会出来给你捣蛋。...外壳调试的特点 Bash 有几个开关和选项对于跟踪调试脚本是非常有用的。“ -n ”开关可以使你不用运行脚本就可以检查脚本语法的正确性。通常在开发期间使用这个开关来检查脚本的语法。...使用 xtrace 你可以检查变量,看看 -ge 的两边是否变化,最后停止循环时, TOTAL 是否为零。
/*|sort -nr|head -3 一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就需要知道 Linux 下文件的存储机制和存储结构.../usr/bin/env bash set -o errexit #等价 set -e。只要发生错误,就终止执行。认为非0就是错误。 set +o nounset # 等价 set +u。...set -o errexit set -o nounset set -o pipefail set -o xtrace # 4合1 set -euxo pipefail ## 写法二 set -eux...这时,一般采用下面的写法: command || exit 1 上面的写法表示只要 command 有非零返回值,脚本就会停止执行。...-ne 0 ]; then echo "command failed"; exit 1; fi 如果两个命令有继承关系,只有第一个命令成功了,才能继续执行第二个命令,那么就要采用下面的写法: command1
看完书,我说,你这个书不“高大上”呀,讲Linux,讲命令工具集,讲vim,讲shell编程,讲awk实践... 想大卖,不得整点高科技新名词吗?...一、以下面的语句开场 set -o nounset 在默认情况下,遇到不存在的变量,会忽略并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。...画外音:有些Linux命令,例如rm的-f参数可以强制忽略错误,此时脚本便无法捕捉到errexit,这样的参数在脚本里是不推荐使用的。 这两个选项,都符合fail fast设计理念。...六、echo不是唯一的调试方法 可以用-n对脚本进行语法检查。 可以用-v跟踪脚本里的每个命令的执行。 可以用-x跟踪脚本里的每个命令的执行,并附加扩充信息。...当然,也可以在脚本里,添加 set -o verbose set -o xtrace 来永久指定输出调试信息。 画外音:多在自己在机器上试一下就明白了。
-o nounset myName=`whoami` # Treat unset variables as an error age=28 echo...-o nounset # Treat unset variables as an error echo "My name is $myName...注意:代码块2中的点与脚本路径中间有至少一个空格。 接下来,我们继续以点“.”来运行a.sh及b.sh。 [Geeklp@Geeklp-BashShell ~]$ ./a.sh bash: ....[Geeklp@Geeklp-BashShell ~]$ chmod u+x [ab].sh [Geeklp@Geeklp-BashShell ~]$ ....这里目前我并不是很清楚,麻烦有知道的小伙伴告知一下这是为什么?非常感谢!
GTP-U User Plane Function (UPF) based on VPP。 本文主要讲解基于vpp的开源项目upg-vpp的编译安装运行。.../bin/bash set -o errexit set -o nounset set -o pipefail if [[ ${BASH:-} ]]; then # not compatible...with alpine's sh set -o errtrace cd "$(dirname "${BASH_SOURCE}")/.." fi . vpp.spec rm -rf vpp git...make install-dep make build make pkg-deb-debug #打包完成后进入build-root 目录下安装: dpkg -i *.deb 4、运行vpp,查询upf库是否启动
readonly passwd_file="/etc/passwd" readonly group_file="/etc/group" 6)参数要规范 当我们的脚本需要接受参数的时候,我们一定要先判断参数是否合乎规范...但是需要注意再能使用英文输出的情况下尽量才用英文,因为有的机器默认是英文语言环境再这样的环境中执行打出来的中文可能是乱码; 注意:在windows下用utf-8编码来写shell脚本的时候,一定要注意这个utf-8是否是有...若有用未设置的变量即让脚本退出执行 set -o nounset # 或 set-u 12)新写法新特性-在变量测试的 新写法不是指有多厉害而是指我们可能更希望使用较新引入的一些语法,更多是偏向代码风格的...不过,其实我觉得这个项目最最精华的部分都不是上面的功能,而是他提供了一个非常非常强大的wiki。.../usr/bin/env bash # 若命令失败让脚本退出 set -o errexit # 若未设置的变量被使用让脚本退出 set -o nounset URL=$1 DIRECTORY=$2
dkms rpm -qa | grep -i dkms # 检查是否安装kernel-devel rpm -qa | grep kernel-devel # 检查是否安装GCC rpm -qa | grep...gcc # 检查是否安装yum-utils rpm -qa | grep yum-utils 如图1所示则表示已安装上述包。...modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe nf_conntrack_ipv4 # 查看是否加载成功 lsmod...报错及解决 镜像下载失败 不能下载镜像可以参考下述方法: # 编写脚本 vim pull_k8s_images.sh 内容如下: set -o errexit set -o nounset set -o...继续阅读 初始化没有明确错误信息,排错自查清单 镜像拉取失败 检查容器是否正常启动 检查防火墙配置 如果init失败则执行kubeadm reset清除初始化信息。
领取专属 10元无门槛券
手把手带您无忧上云