Bash脚本教程之set命令 原创 孙叫兽杂谈 2021-06-18 11:05:16 ©著作权 文章标签 Linux系统 Bash脚本教程 文章分类 运维 ©著作权归作者所有:来自51CTO博客作者孙叫兽杂谈的原创作品,请联系作者获取转载授权,否则将追究法律责任 目录 简介 set -u set -x Bash 的错误处理 set -e set -o pipefail 其他参数 set 命令总结 shopt 命令 set命令是 Bash 脚本的重要环节,却常常被忽视,导致 赞 收藏 评论 分享 举报 上一篇:Bash脚本教程之脚本除错 下一篇:Bash脚本教程之数组 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 Bash脚本set命令教程 这篇文档写的非常好,对想了解set命令的朋友,推荐看看。 http://www.ruanyifeng.com/blog/2017/11/bash-set.html bash html linux Bash脚本教程之read命令 目录用法参数IFS 变量用法有时,脚本需要在执行过程中,由用户提供一部分数据,这时可以使用read命令。它将用户的输入存入一个变量,方便后面的代码使用。用户按下回车键,就表示输入结束。read命令的格式如下。read [-options] [variable...]上面语法中,options是参数选项,variable是用来保存输入数值的一个或多个变量名。如果没有提供变量名,环境变量REPLY会包含用户输入的一整行数据。下面是一个例子demo.sh。#!/b. Linux系统 Bash脚本教程 Bash脚本教程之mktemp 命令,trap 命令 目录临时文件的安全问题mktemp 命令的用法mktemp 命令的参数trap 命令Bash 脚本有时需要创建临时文件或临时目录。常见的做法是,在/tmp目录里面创建文件或目录,这样做有很多弊端,使用mktemp命令是最安全的做法。临时文件的安全问题直接创建临时文件,尤其在/tmp目录里面,往往会导致安全问题。首先,/tmp目录是所有人可读写的,任何用户都可以往该目录里面写文件。创建的临时文件也是所有人可读的。$ touch /tmp/info.txt$ ls -l Linux系统 Bash脚本教程 Bash脚本教程之脚本除错 目录常见错误bash的-x参数环境变量LINENOFUNCNAMEBASH_SOURCEBASH_LINENO常见错误编写 Shell 脚本的时候,一定要考虑到命令失败的情况,否则很容易出错。#! /bin/bashdir_name=/path/not/existcd $dir_namerm *上面脚本中,如果目录$dir_name不存在,cd $dir_name命令就会执行失败。这时,就不会改变当前目录,脚本会继续执行下去,导致rm *命令删光. Linux系统 Bash脚本教程 Bash脚本教程之脚本入门 目录Shebang 行执行权限和路径env 命令注释脚本参数shift 命令getopts 命令配置项参数终止符 --exit 命令命令执行结果source 命令别名,alias 命令脚本(script)就是包含一系列命令的一个文本文件。Shell 读取这个文件,依次执行里面的所有命令,就好像这些命令直接输入到命令行一样。所有能够在命令行完成的任务,都能够用脚本完成。脚本的好处是可以重复使用,也可以指定在特定场合自动调用,比如系统启动或关闭时自动执行脚 Linux系统 Bash脚本教程 Bash脚本教程之数组 目录创建数组读取数组读取单个元素读取所有成员默认位置数组的长度提取数组序号提取数组成员追加数组成员删除数组关联数组数组(array)是一个包含多个值的变量。成员的编号从0开始,数量没有上限,也没有要求成员被连续索引。创建数组数组可以采用逐个赋值的方法创建。ARRAY[INDEX]=value上面语法中,ARRAY是数组的名字,可以是任意合法的变量名。INDEX是一个大于或等于零的整数,也可以是算术表达式。注意数组第一个元素的下标是0, 而不是 Linux系统 Bash脚本教程 Bash脚本教程之函数 目录简介参数变量return 命令全局变量和局部变量,local 命令简介函数(function)是可以重复使用的代码片段,有利于代码的复用。它与别名(alias)的区别是,别名只适合封装简单的单个命令,函数则可以封装复杂的多行命令。函数总是在当前 Shell 执行,这是跟脚本的一个重大区别,Bash 会新建一个子 Shell 执行脚本。如果函数与脚本同名,函数会优先执行。但是,函数的优先级不如别名,即如果函数与别名同名,那么别名优先执行。Bash 函数定义的语法有两种. Linux系统 Bash脚本教程 Bash脚本教程之循环 目录while 循环until 循环for...in 循环for 循环break,continueselect 结构Bash 提供三种循环语法for、while和until。while 循环while循环有一个判断条件,只要符合条件,就不断循环执行指定的语句。while condition; do commandsdone上面代码中,只要满足条件condition,就会执行命令commands。然后,再次判断是否满足条件condition,只要满足,就会 Linux系统 Bash脚本教程 Bash脚本教程之命令提示符 目录环境变量 PS1颜色环境变量 PS2,PS3,PS4用户进入 Bash 以后,Bash 会显示一个命令提示符,用来提示用户在该位置后面输入命令。环境变量 PS1命令提示符通常是美元符号$,对于根用户则是井号#。这个符号是环境变量PS1决定的,执行下面的命令,可以看到当前命令提示符的定义。$ echo $PS1Bash 允许用户自定义命令提示符,只要改写这个变量即可。改写后的PS1,可以放在用户的 Bash 配置文件.bashrc里面,以后新建 Bash 对话时,新的提示 Linux系统 Bash脚本教程 Bash脚本教程之启动环境 目录Session登录 Session非登录 Session.bash_logout启动选项键盘绑定Session用户每次使用 Shell,都会开启一个与 Shell 的 Session(对话)。Session 有两种类型:登录 Session 和非登录 Session,也可以叫做 login shell 和 non-login shell。登录 Session登录 Session 是用户登录系统以后,系统为用户开启的原始 Session,通常需要用户.. Linux系统 Bash脚本教程 Bash脚本教程之条件判断 目录if 结构test 命令判断表达式文件判断字符串判断整数判断正则判断test 判断的逻辑运算算术判断普通命令的逻辑运算case 结构if 结构if是最常用的条件判断结构,只有符合给定条件时,才会执行指定的命令。它的语法如下。if commands; then commands[elif commands; then commands...][else commands]fi这个命令分成三个部分:if、elif和els. Linux系统 Bash脚本教程 Bash脚本教程之目录堆栈 目录cd -pushd,popddirs 命令为了方便用户在不同目录之间切换,Bash 提供了目录堆栈功能。cd -Bash 可以记忆用户进入过的目录。默认情况下,只记忆前一次所在的目录,cd -命令可以返回前一次的目录。# 当前目录是 /path/to/foo$ cd bar# 重新回到 /path/to/foo$ cd -上面例子中,用户原来所在的目录是/path/to/foo,进入子目录bar以后,使用cd -可以回到原来的目录。pushd,popd. Linux系统 Bash脚本教程 Bash脚本教程之行操作 目录简介光标移动清除屏幕编辑操作自动补全操作历史基本用法history 命令相关快捷键其他快捷键简介Bash 内置了 Readline 库,具有这个库提供的很多“行操作”功能,比如命令的自动补全,可以大大加快操作速度。这个库默认采用 Emacs 快捷键,也可以改成 Vi 快捷键。$ set -o vi下面的命令可以改回 Emacs 快捷键。$ set -o emacs如果想永久性更改编辑模式(Emacs / Vi),可以将命令写在. Linux系统 Bash脚本教程 Bash脚本教程之算数运算 目录算术表达式数值的进制位运算逻辑运算赋值运算求值运算expr 命令let 命令算术表达式((...))语法可以进行整数的算术运算。$ ((foo = 5 + 5))$ echo $foo10((...))会自动忽略内部的空格,所以下面的写法都正确,得到同样的结果。$ ((2+2))$ (( 2+2 ))$ (( 2 + 2 ))这个语法不返回值,命令执行的结果根据算术运算的结果而定。只要算术结果不是0,命令就算执行成功。$ (. Linux系统 Bash脚本教程 Bash脚本教程之变量 目录简介创建变量读取变量删除变量输出变量,export 命令特殊变量变量的默认值declare 命令readonly 命令let 命令Bash 变量分成环境变量和自定义变量两类。简介环境变量是 Bash 环境自带的变量,进入 Shell 时已经定义好了,可以直接使用。它们通常是系统定义好的,也可以由用户从父 Shell 传入子 Shell。env命令或printenv命令,可以显示所有环境变量。$ env# 或者$ printenv下面是 Linux系统 Bash脚本教程 Bash脚本教程之基本语法 目录echo 命令-n参数-e参数命令格式空格分号命令的组合符&&和||type 命令快捷键echo 命令由于后面的例子会大量用到echo命令,这里先介绍这个命令。echo命令的作用是在屏幕输出一行文本,可以将该命令的参数原样输出。$ echo hello worldhello world上面例子中,echo的参数是hello world,可以原样输出。如果想要输出的是多行文本,即包括换行符。这时需要把多行文本放在引号里面. Linux系统 Bash脚本教程 bash 脚本之 set 命令-转 目录set 简介set -u 背景set -u 简介set -x背景set -x 简介set -e背景set -e 简介失败继续执行set -o pipefail背景set -o pipefail 简介总结set命令是 Bash 脚本的重要环节,却常常被忽视,导 bash Bash Shell Bash脚本教程之引号和转义 目录转义单引号双引号Here 文档Here 字符串转义某些字符在 Bash 里面有特殊含义(比如$、&、*)。$ echo $date$上面例子中,输出$date不会有任何结果,因为$是一个特殊字符。如果想要原样输出这些特殊字符,就必须在它们前面加上反斜杠,使其变成普通字符。这就叫做“转义”(escape)。$ echo \$date$date上面命令中,只有在特殊字符$前面加反斜杠,才能原样输出。反斜杠本身也是特殊字符,如果想要原. Linux系统 Bash脚本教程 #yyds干货盘点# Bash脚本---set命令 set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本章介绍set的基本用法,帮助你写出更安全的 Bash 脚本。1、简介我们知道,Bash 执行脚本时,会创建一个子 Shell。$ bash script.sh上面代码中,script.sh是在一个子 Shell 里面执行。这个子 Shell 就是脚本的执行环境,Bash 默认给定了 bash 命令行 开发者 运算符 执行环境