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. linux_曝出重大bash安全漏洞及修复方法

    日前Linux官方内置Bash中新发现一个非常严重安全漏洞(漏洞参考https://access.redhat.com/security/cve/CVE-2014-6271  ),黑客可以利用该Bas ...

  2. bash的工作特性(2)

    bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示. 命令的执行结果状态 成功,失败 bash使用特殊变量$?保存最近一条命令的执行状态结果:echo$? 0:成功 1-255 ...

  3. shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)

    shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected) blogdaren 2015-02-26  抢沙发 14916人 ...

  4. 在Windows中运行Linux bash命令的几种方法

    如果你正在课程中正在学习 shell 脚本,那么需要使用 Linux 命令来练习命令和脚本. 你的学校实验室可能安装了 Linux,但是你自己没有安装了 Linux 的笔记本电脑,而是像其他人一样的 ...

  5. [日常工作] cmd以及bash 直接使用当前目录的方法

    1. 从知乎学到了一点.. 2. 之前想在比如f:\a\b 目录下执行cmd命令的时候 总是需要先 f: 再cd目录的方式. 3. 知乎上面学到 发现可以通过在当前目录下面 输入  cmd 或者是 b ...

  6. windows Git Bash 无法运行python解决方法

    以前运行cmd命令都是在cmd里面的,但是那个页面实在是太丑了,后面我就全部用git bash来运行window下的命令了. 但是在git bash 中运行下python – -version 或 p ...

  7. 修改profile导致bash不能用的补救方法

    输入这条命令:export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 由于shell命令基本都在/usr/bin,/usr/sbin,/bin ...

  8. bash{} 方法总结

    假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 我们可以用 ${ } 分别替换获得不同的值: ${file#*/}:拿掉第一条 / 及其左边的字串:dir ...

  9. [转] Bash脚本:怎样一行行地读文件(最好和最坏的方法)

    用bash脚本读文件的方法有很多.请看第一部分,我使用了while循环及其后的管道命令(|)(cat $FILE | while read line; do … ),并在循环当中递增 i 的值,最后, ...

随机推荐

  1. 使用java 打印日历

    package hangshu; /* * 打印从1900年到2.year年的日历 */ import java.util.Scanner; public class Calender { publi ...

  2. Python 生成随机验证码

    Python生成随机验证码  Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 fro ...

  3. Python操作SQLAchemy

    如果对代码不懂就看这个:http://www.cnblogs.com/jixuege-1/p/6272888.html 本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql O ...

  4. wmv12下安装centos7

    第一步:安装软件: vmw版本是12,并在vmw下安装centos为CentOS-7-x86_64-DVD-1708.iso: 第二步:修改vmw虚拟网络配置 1)配置VMnet8 修改ip等信息 点 ...

  5. Typescript学习

    一 什么是Typescript 简单的说,TypeScript 是 JavaScript 的一个超集,主要提供了类型系统和对 ES6 的支持,它由 Microsoft 开发,代码开源于 GitHub  ...

  6. Python系列之 - multiprocessing

    由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. multiprocessing包是Python中的多进程 ...

  7. Git + Maven + Jenkins 实现分布式部署

    一.安装 和 准备工作 我们选择了用 Tomcat 服务器下 war 包的安装方式.Jenkins 的下载地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列 ...

  8. js数据结构之栈、队列(数据结构与拉火车游戏)

    1.js实现队列的数据结构(先进先出) function Queue (array) { if(Object.prototype.toString.call(array)!="[object ...

  9. HtmlUnit入门一

    htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容. 项目可以模拟浏览器运行,被誉为java浏览器的开源实现.是一个没有界面的浏览器. 采 ...

  10. [ZJOI 2010]Perm 排列计数

    Description 题库链接 询问有多少个 \(1\sim N\) 的排列 \(P\) 满足" \(\forall i\in[2,N], P_i>P_{\frac{i}{2}}\) ...