bash的工作特性之命令执行状态返回值和命令展开所涉及的内容及其示例演出

!脚本执行与调试

1、绝对路径执行,要求文件有执行权限

2、以sh命令执行,不要求文件有执行权限

3、.加空格或source命令执行,脚本将在当前shell中执行

4、检查脚本语法

bash -v test.sh

5、跟踪脚本执行

bash -x test.sh

!环境脚本执行规则

用户登录:/etc/profile、/.bash_profile、/.bash_login、~/.profile

用户注销:~/.bash_logout

执行新shell: /etc/bash.bashrc、~/.bashrc

执行script(使用#!/bin/bash):如指定BASH_ENV的值,则执行其指定的启动文件

执行script(使用#!/bin/sh):不调用任何环境脚本

!基本语法

1、脚本程序以#!/bin/bash 开始。以告之系统脚本以何种shell执行。

2、以#开头的行被视为注解,执行时自动忽略。

3、每行不得多于255个字节,可在行末加上反斜杠的方式拆分单行内容到多行中。

例如:

test1=abcdefg

hij

klmnopq

rstuvwxyz

4、多命令以分号分隔时,命令从左至右依次执行。

例如: whoami;w

5、多命令以&&分隔时,命令从左至右按前面命令执行成功后再执行下个命令的原则依次执行。

例如:make && make install

6、多命令以||分隔时,命令从左至右按前面命令执行失败后再执行下个命令的原则依次执行。

7、多个命令以分号分隔放置()中,则会启用子shell并执行。

例如:(mkdir testdir;cd testdir;touch testfile)

8、多个命令以分号分隔放置{}中,则会在当前shell中执行。需要注意的是命令和{}必须有空格间隔,并且最后一条命令也必须加分号。

例如:{ mkdir testdir;cd testdir;touch testfile; }

9、被反引号`括起来的命令或$(命令),shell将直接引用执行结果。

例如:

test=date

test=$(date)

10、可以将算术运算式以$[ 算术运算式 ]的形式进行求值。注意算术运算式和[]必须有空格分隔,此方法只支持整型运算。

例如:test=$[ 32 * 17 ]

11、使用$((运算式))的形式也可以进行算术运算求值,并且可以进行布尔运算。

例如:test=$(( 32 * 17 ))

12、使用let 运算式也能进行算术运算,算术式各元素间不得有空格,否则应将算术式用引号括起来。

例如:let ++test

13、任何命令执行后均会返回一个取值范围在0~255之间的整型返回码。主要值含义如下:

0:正常结束

1:通用执行错误

2:误用shell命令

126:命令不可执行

127:命令未找到

128:无效退出参数

130:被ctrl-c强行中止

255:退出状态码越界

shell script默认返回最后一条命令的返回码。可以使用exit退出script执行并返回指定的返回码。

例如:exit 15

通过$?这个系统变量可以获取上一条命令的返回码。

例如:

sync

echo $?

14、通过getopts命令获取命令行选项。

语法为:getopts 选项行 选项变量。

选项行由各选项的单一字符组成,如某选项字符需要参数,则在选项字符后加冒号。调用时此选项后无参数的话系统会提示错误,如不希望出现提示则应在选项行最前面加上冒号。系统会将参数存入OPTARG变量。

例如:

#!/bin/bash

while getopts :a:bc opt

do

case $opt in

a)

echo "选项a,后跟参数:$OPTARG";;

b)

echo "选项b";;

c)

echo "选项c";;

*)

;;

esac

done

15、利用mktemp建立临时文件

语法为:mktemp 选项 临时文件模板

如果建立成功返回0。

临时文件模板格式形式如:/tmp/test.XXXXXX或/usr/ttt/tttt.XXXXXX,文件名末6个字符必须为XXXXXX.生成成功后会由系统代替为随机6个字符。

选项-q 不产生错误信息。

选项-p 指定建立临时文件的父级目录,父级目录必须已存在。例如:mktemp -p /usr/tmp tf.XXXXXX

选项-t 按环境变量TMPDIR变量中指定的父级目录建立临时文件,如变量未定义,则父级目录为/tmp

选项-d 建立的是临时目录。

直接执行mktemp,会在/tmp目录下建立tmp.XXXXXX形式的临时文件,文件名末6个字符为随机字符。可使用下面方式获取生成的文件名。

tmpfile=$(mktemp)

bash命令的使用的更多相关文章

  1. Windows 10预览版14316开启Bash命令支持

    00x0 前言 4月7日凌晨,微软推送了最新的Windows 10一周年更新预览版14316,其中重要的是原生支持Linux Bash命令行支持. 00x1 问题 如何开启Linux Bash命令行? ...

  2. bash命令行返回值和展开

    bash命令行返回值和展开 标签(空格分隔): bash,命令,状态,展开 1.命令状态结果和执行结果 (1)命令执行的状态返回值,命令执行完成之后,其执行状态结果值保存于bash的特殊状态变量$?中 ...

  3. 转: windows 10使用原生linux bash命令行

    转: https://www.zybuluo.com/pandait/note/337430 windows 10使用原生linux bash命令行 linux bash windows-10 第一时 ...

  4. BASH 命令以及使用方法小结

    最近工作中需要写一个Linux脚本,用到了很多BASH命令,为了防止以后忘记,在这里把它们一一记下来.可能会比较乱,随便看看就好了.如果有说的不对的地方也欢迎大家指正. 1,export VAR=.. ...

  5. history介绍及bash命令快速调用

    在日常工作中,能够快速并准确的使用命令是必不可少的,下面为大家介绍一下其中的小技巧. 一.查找命令历史——history 使用history能够快速的找到之前输入过的命令. # history 大家可 ...

  6. Linux Bash命令关于程序调试详解

    转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...

  7. Python调用Linux bash命令

    import subprocess as sup  # 以下注释很多(为了自己以后不忘), 如果只是想在python中执行Linux命令, 看前5行就够了 # 3.5版本之后官方推荐使用sup.run ...

  8. CentOS Bash 命令补全增强软件包 bash-completion

    引言 之前安装的 CentOS 7 是最小化安装,在使用 systemctl 命令进行服务的管理时,经常手动输入相关服务名.如果对一个服务名称不熟悉,这样可以迫使我们记住它,但如果对一个服务名已经很熟 ...

  9. Linux常用bash命令

    目录 bash命令 基础操作 export | whereis | which | clear 文件操作 ls | touch | cat | more | head | tail | mv | cp ...

  10. Linux之整理bash命令类型

    作业四:整理bash命令类型,验证寻找一个命令的优先级 类型 ==> alias ==> Compound Commands ==> function ==> build_in ...

随机推荐

  1. csps区间dp

    加分二叉树 我们可以枚举中间这个 k 的位置,然后分别递归计算左右子树,这就让我们想到这是一个和区间有关的,我们可以用区间dp来解决. \(f[i][j]\) 表示 i, j 这个区间的最大分值.用一 ...

  2. json数组格式问题

    ---恢复内容开始--- 使用jsonserver来模拟后台数据接口时犯了一个很低级的错误 找了很久没有发现有什么不对劲的地方,后来仔细发现原来是一个很细微的语法问题:}]  中间不能有逗号!! -- ...

  3. Nodejs环境打包前端项目

    Node.js 在Linux下安装和环境搭建/编译项目 安装nodejs:1.下载nodejs源码包 wget https://nodejs.org/dist/v14.16.0/node-v14.16 ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (124)-- 算法导论10.5 5题

    五.用go语言,给定一个n结点的二叉树,写出一个 O(n)时间的非递归过程,将该树每个结点的关键字输出.要求除该树本身的存储空间外只能使用固定量的额外存储空间,且在过程中不得修改该树,即使是暂时的修改 ...

  5. React学习笔记16-属性props

    1.属性的定义 props 是正常是外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更 改,但是你可以通过父组件主动重新渲染的方式来传入新的 props. 这就是React中的 ...

  6. CoreFX中Dictionary<TKey, TValue>的源码解读

    无论是实际的项目中,还是在我们学习的过程中,都会重点的应用到Dictionary<TKey, TValue>这个存储类型.每次对Dictionary<TKey, TValue> ...

  7. powerdesigner 生成sql语言

    首先要确定的是自己已经准备好一个概念模型 在概念模型界面点击上方工具栏中的Tools->Generate logical data model.. 生成逻辑模型 同样的操作生成物理模型 Gene ...

  8. MODBUS转PROFINET网关TS-180 网关连接西门子 PLC 和工业称重仪表

    随着科技的高速发展,工业自动化行业对日益多样的称重需求越来越高,上海某公司在国内的一个 工业自动化项目中,监控中心系统需要远程实时采集工业称重仪表测量的各种称重参数.该系统使用的是 西门子 S7-30 ...

  9. C#winform中使用SQLite数据库

    公众号「DotNet学习交流」,分享学习DotNet的点滴. SQLite简介 SQLite是一种轻量级的关系型数据库管理系统(RDBMS),它以一个C库的形式提供.以下是SQLite数据库的一些关键 ...

  10. MySQL - Plugin 'InnoDB' registration as a STORAGE ENGINE failed 错误处理

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin Plugin 'InnoDB' registration as a STORAGE ENGINE failed,从详细 ...