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引起的问题 问题背景最近在编译yocto工程,设置环境变量时,突然发现oe-init-build-env无法正常工作了,正常情况下BDIR="build",但莫名奇妙生成了一个x的目录,有点懵。# normaldir$ . oe-init-build-envdir/build$# abnormaldir$ . oe-init-build-envdir/x$scripts/oe-buildenv bash 环境变量 emacs 编写安全Bash脚本的建议 有一个shell脚本校验工具(linter),叫做 shellcheck 。使用它来使您的shell脚本更好!变量赋值在bash中变量赋值按照下面的方式:VARIABLE=2并且你可以使用$VARIABLE(变量名)来引用变量。需要注意的是不要在=运算符的两边放置空格符,比如VARIABLE= 2、VARIABLE = 2、或者VARIABLE =2,这并不是语法错误,但是将会做完全不需要的事情( bash 环境变量 Bash 教你用10行bash shell脚本轻松监控Linux 监控我们的环境对于服务器运维来说至关重要,尤其是在部署新的应用程序时。如今,公司每天都使用开源解决方案来监控系统资源。但是,当出于测试的目的来监控一定时间时,bash 脚本会派上用场。在本教程中,我们将编写一个 bash shell 脚本,它将输出一个三列表,来显示我们机器上的内存、磁盘和 CPU 的百分比。让我们开始吧!该脚本基本上由三个主要部分组成:监控内存:free -m | awk 'NR bash 数据 Memory Bash 脚本 set 命令教程 服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节。 set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使用 Bash 脚本。 一、简介 我们知道,Bash 执行脚本的时候,会创建一个新的 Shell。 $ bash 命令行 开发者 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脚本教程之脚本入门 目录Shebang 行执行权限和路径env 命令注释脚本参数shift 命令getopts 命令配置项参数终止符 --exit 命令命令执行结果source 命令别名,alias 命令脚本(script)就是包含一系列命令的一个文本文件。Shell 读取这个文件,依次执行里面的所有命令,就好像这些命令直接输入到命令行一样。所有能够在命令行完成的任务,都能够用脚本完成。脚本的好处是可以重复使用,也可以指定在特定场合自动调用,比如系统启动或关闭时自动执行脚 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脚本教程之数组 目录创建数组读取数组读取单个元素读取所有成员默认位置数组的长度提取数组序号提取数组成员追加数组成员删除数组关联数组数组(array)是一个包含多个值的变量。成员的编号从0开始,数量没有上限,也没有要求成员被连续索引。创建数组数组可以采用逐个赋值的方法创建。ARRAY[INDEX]=value上面语法中,ARRAY是数组的名字,可以是任意合法的变量名。INDEX是一个大于或等于零的整数,也可以是算术表达式。注意数组第一个元素的下标是0, 而不是 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脚本教程之函数 目录简介参数变量return 命令全局变量和局部变量,local 命令简介函数(function)是可以重复使用的代码片段,有利于代码的复用。它与别名(alias)的区别是,别名只适合封装简单的单个命令,函数则可以封装复杂的多行命令。函数总是在当前 Shell 执行,这是跟脚本的一个重大区别,Bash 会新建一个子 Shell 执行脚本。如果函数与脚本同名,函数会优先执行。但是,函数的优先级不如别名,即如果函数与别名同名,那么别名优先执行。Bash 函数定义的语法有两种. 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脚本教程之目录堆栈 目录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脚本教程之变量 目录简介创建变量读取变量删除变量输出变量,export 命令特殊变量变量的默认值declare 命令readonly 命令let 命令Bash 变量分成环境变量和自定义变量两类。简介环境变量是 Bash 环境自带的变量,进入 Shell 时已经定义好了,可以直接使用。它们通常是系统定义好的,也可以由用户从父 Shell 传入子 Shell。env命令或printenv命令,可以显示所有环境变量。$ env# 或者$ printenv下面是 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脚本教程之基本语法 目录echo 命令-n参数-e参数命令格式空格分号命令的组合符&&和||type 命令快捷键echo 命令由于后面的例子会大量用到echo命令,这里先介绍这个命令。echo命令的作用是在屏幕输出一行文本,可以将该命令的参数原样输出。$ echo hello worldhello world上面例子中,echo的参数是hello world,可以原样输出。如果想要输出的是多行文本,即包括换行符。这时需要把多行文本放在引号里面. Linux系统 Bash脚本教程 Bash脚本教程之算数运算 目录算术表达式数值的进制位运算逻辑运算赋值运算求值运算expr 命令let 命令算术表达式((...))语法可以进行整数的算术运算。$ ((foo = 5 + 5))$ echo $foo10((...))会自动忽略内部的空格,所以下面的写法都正确,得到同样的结果。$ ((2+2))$ (( 2+2 ))$ (( 2 + 2 ))这个语法不返回值,命令执行的结果根据算术运算的结果而定。只要算术结果不是0,命令就算执行成功。$ (. Linux系统 Bash脚本教程 Bash脚本教程之引号和转义 目录转义单引号双引号Here 文档Here 字符串转义某些字符在 Bash 里面有特殊含义(比如$、&、*)。$ echo $date$上面例子中,输出$date不会有任何结果,因为$是一个特殊字符。如果想要原样输出这些特殊字符,就必须在它们前面加上反斜杠,使其变成普通字符。这就叫做“转义”(escape)。$ echo \$date$date上面命令中,只有在特殊字符$前面加反斜杠,才能原样输出。反斜杠本身也是特殊字符,如果想要原. Linux系统 Bash脚本教程 marvelous designer python 窗口 常用GUI框架wxPython安装wxPythonpip install -U wxPythonC:\Users> pip install -U wxPython Collecting wxPython Downloading https://files.pythonhosted.org/packages/34/41/e0e109a72966f596a5b93123d94eaabd535 App 控件 用户名 emr竞价实例 ON_DEMAND 第四章 某制造业企业智能BPM系统设计实施与应用 这一章我们以W企业为背景对企业绩效管理系统进行功能设计。将企业绩效管理的思想,平衡计分卡和关键绩效指标体系的方法运用到系统中,实现一个以企业战略目标管理为纲领,以企业业务运作系统为基础,综合运用BI技术的企业绩效管理系统的设计。该企业目前绩效管理存在的问题是:企业员工人心涣散,员工积极性不高,很多员工拿企业作为跳板,没有想要长期干下去的意愿,大量 emr竞价实例 ON_DEMAND 人工智能 数据库 数据 数据仓库 springboot logback配置远程日志 1. Java 日志概览1.1 总体概览1.2 日志级别1.3 综合对比1.4 最佳实践2. Spring Boot 日志实现2.1 Spring Boot 日志配置2.2 Logback 配置2.3 Log4j 配置3.小结之前录过一个视频和大家分享 Spring Boot 日志问题,但是总感觉差点意思,因此松哥打算再通过一篇文章来和大家捋一捋 Java 中的日志问题,顺便我们把 Spring spring boot xml spring Logging android kotlin MutableList初始化 Kotlin的一些标准函数非常相似,我们不确定使用哪个函数。在这里我将介绍一个简单的方法来清楚地区分他们的差异和如何选择使用。范围函数我重点关注run, with, T.run, T.let, T.also and T.apply函数。我称他们为范围函数,因为我认为他们的主要功能是为调用函数提供一个内部范围。run函数是说明最简单的范围方法fun test() { var mood = " 移动开发 数据结构与算法 bc webview java java非阻塞socket 长连接通讯不断开 注: 1.服务端的sk.isAcceptable()只能是注册的惟一一个ServerSocketChannel,所以有sk.interestOps(SelectionKey.OP_ACCEPT); 产生sk.isReadable()只能是ServerSocketChannel产生的并且已经注册过的SocketChannel,所以有sk.interestOps(SelectionKey.OP_REA 数据 服务端 客户端