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. Go 1.22 中的 For 循环

    原文在这里. 由 David Chase and Russ Cox 发布于2023年9月19日 Go 1.21 版本包含了对 for 循环作用域的预览更改,我们计划在 Go 1.22 中发布此更改,以 ...

  2. C++中::和:, .和->的作用和区别

    符号::和:的作用和区别 ::是作用域运算符,A::B表示作用域A中的-名称B,A可以是名字空间.类.结构: 类作用域操作符 "::"指明了成员函数所属的类.如:M::f(s)就表 ...

  3. open与fopen的区别

    1. 来源 从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别: open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描 ...

  4. Python基础——变量、常量、数字类型、四 列表list、五 字典dict、六 布尔bool、垃圾回收机制、用户交互、运算符、流程控制

    文章目录 变量 一 引入 一.什么是变量? 二.为什么要有变量? 三.怎么使用变量(先定义.后使用) 3.1.变量的定义与使用 3.2.变量名的命名规范 3.3.变量名的命名风格 3.4.变量值的三大 ...

  5. 快速启动Stable Diffusion WebUI

    快速启动Stable Diffusion WebUI详情    产品文档   输入文档关键字查找   机器学习PAI 产品概述 快速入门 操作指南 准备工作 开通PAI并创建默认工作空间 开通并授权依 ...

  6. Thinking in Java 4th Edition Source Code

    Thinking in Java 4th Edition Source Code Instructions for downloading, installing and testing the so ...

  7. 超星读书下载的pdz文件如何转为pdf文件详细教程(亲测有效)

    前言: 你还在为超星读书下载的pdz格式书籍而烦恼吗?还在为不知道怎么将pdz格式转为pdf格式而气愤吗?请看以下教程. 流程: 使用超星阅读器将pdz文件转换为.xps或.oxps文件 利用第三方软 ...

  8. LLM探索:为ChatGLM2的gRPC后端增加连续对话功能

    前言 之前我做 AIHub 的时候通过 gRPC 的方式接入了 ChatGLM 等开源大模型,对于大模型这块我搞了个 StarAI 框架,相当于简化版的 langchain ,可以比较方便的把各种大模 ...

  9. Kubernetes: kube-apiserver 之认证

    kubernetes:kube-apiserver 系列文章: Kubernetes:kube-apiserver 之 scheme(一) Kubernetes:kube-apiserver 之 sc ...

  10. BI 数据可视化平台建设(1)—交叉表组件演变实战

    作者:vivo 互联网大数据团队 - Zhu Jianchen 本文是vivo互联网大数据团队<BI数据可视化平台建设>系列文章第1篇 - 交叉表组件. 交叉表在数据分析里应用广泛,通过本 ...