shell script 学习笔记-----命令执行
1、PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行。通常shell都会设置一个名叫PATH的环境变量,其中保存着一系列用于查找命令文件的目录名,并且目录出现的顺序非常重要,因为shell会按序进行查找,当找到第一个与命令对应的文件就执行

2、通常可根据“$?”的值来判断上一条命令是否运行成功。一般$?=0则说明上一条命令运行成功,否则表示不成功。如果熟悉C语言的话就会知道,其实$?保存的就是上一个程序main函数的返回值。需要注意的是$?仅保存直接相邻的上一条命令的地址,下图第二个$?的值变为0是因为上一条"echo $?"命令成功执行了。通常会用$?作为脚本里面if判断语句的条件,根据上条指令的执行情况,做出不同的分支

3、后台运行命令:如下图所示,在执行的指令后添加符号'&',就能让该指令在后台执行。其中第二行,中括号里的数字表示在当前shell的后台中运行的进程编号,第二个数字则为系统进程号。所谓后台运行的本质是shell不需要等待当前的命令执行完毕即可接受新的命令执行,但是后台进程的输出依旧会显示在屏幕上。tips:1)如果例如想要杀死下图所示后台进程,可以使用kill %1或者kill 3526两种方式。2)如果想让重新用shell控制后台进程,则使用例如命令fg %1这样的方式即可。3)如果想让当前在运行的命令转为后台运行,则可以先用ctrl Z使该命令停止,然后输入bg使其在后台运行

4、在shell中逻辑运算的判断方式与C语言中大致相同。例如符号“&&”表示逻辑与,执行语句A&&B,当且仅当A运行成功才会运行B。对于逻辑或同理可得,语句A || B,当且仅当A运行失败才会运行B。
5、当执行了命令“set -e”后,之后的语句如有执行失败的,则退出整个脚本的运行,例如下图所示,如果当前目录不存在mytmp目录时,cd语句执行完就自动退出脚本了,并不会运行ls语句

6、通常即使在后台运行的进程也是shell的子进程,因此,当退出shell时,它就会给它的子进程发送一个SIGHUP的信号来杀死它。如果想要在后台运行的进程不随着shell的结束而结束,就要在输入命令的前面加上nohup,如下图所示。由此shell的子进程就会忽略发来的SIGHUP信号,脱离shell单独运行。(据说shell关闭之后就会自动在当前目录下生成一个nohup.out文件用于保存子进程的输入,实验之后发现该文件确实存在,不过并没有内容。)

下图为shell关闭之前和之后,bg进程的运行状态


参考文献:《bash Cookbook》,Carl Albing
shell script 学习笔记-----命令执行的更多相关文章
- shell script 学习笔记-----if,for,while,case语句
1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...
- shell script 学习笔记-----shell变量
1.在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的.如果想 ...
- shell script 学习笔记-----标准输出
1.将标准输出(stdout)和标准错误输出(stderr)分别重定向到两个不同的文件 其中符号'>'默认将标准输出重定向,意思和'1>'相同,‘2>'表示重定向标准错误输出,数字1 ...
- redis学习笔记——命令执行流程
基础知识部分 如果需要掌握Redis的整个命令的执行过程,那么必须掌握一些基本的概念!否则根本看不懂,下面我就一些在我看来必备的基础知识进行总结,希望能为后面命令的整个执行过程做铺垫. 事件 Redi ...
- Linux shell 菜鸟学习笔记....
20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...
- linux学习笔记命令篇1---命令ls
前言: linux中接触最多的就是命令和文件. 命令 命令是有其格式的, 一般格式是command [option] parameter1 parameter2 [paramete3 ...]: 注 ...
- bash shell学习-shell script基础 (笔记)
A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) Linux ...
- Shell脚本学习-echo命令
跟着RUNOOB网站的教程学习的笔记 shell的echo指令与PHP的echo指令类似,都是用于字符串的输出.命令格式: echo string 1 显示普通字符串 echo "It is ...
- shell编程学习笔记(一):编写我的第一段代码
目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...
随机推荐
- ahjesus解决win下U盘无法写入的问题
可能是由于不同品牌的U盘出厂时磁盘分区和格式化方式不同而引起的兼容性问题.解决方案如下 启动cmd.输入diskpart,启动DISKPART工具 在DISKPART窗口中输入以下命令: >li ...
- mac下eclipse的svn(即svn插件)怎么切换账号?
以mac os x为例(Unix/Linux类似) 打开命令行窗口,即用户的根目录(用户的home目录) cd ~ 即可进入home目录. 执行命令 ls -al 会列出home目录下的所有文件及文件 ...
- VS 2013 Preview 自定义 SharePoint 2013 列表 之 两个Bug
SharePoint 2013 已RTM了,对于程序员来说又要了解新功能了,同时 VS 2013 也将要 RTM了,两者同时应用定会有不新功能,我们先从 自定义 列表开始. SharePoint 20 ...
- 浅谈ES6中的Proxy
Proxy是一个很有趣的对象,它能够修改某些操作的默认行为,等同于在语言层面做出修改,属于一种‘元编程’,即对编程语言进行编程. Proxy其实很好理解,就是在目标对象之前架设一层拦截,外界的访问都得 ...
- jQuery.merge()
jQuery.merge( first, second ) //返回Array 合并两个数组内容到第一个数组. first第一个用来合并的数组,元素是第二数组加进来的. second第二个数组合并到第 ...
- 浅谈URLEncoder编码算法
一.为什么要用URLEncoder 客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将 ...
- iOS 工厂方法模式
iOS工厂方法模式 什么是工厂方法模式? 工厂方法模式和简单工厂模式十分类似,大致结构是基本类似的.不同在于工厂方法模式对工厂类进行了进一步的抽象,将之前的一个工厂类抽象成了抽象工厂和工厂子类,抽象工 ...
- Git基本使用命令
整理Git的一些基本使用命令. # 1)克隆代码 boldseas@lian-PC MINGW64 /d/TestGroup $ git clone ssh://git@code.boldseas ...
- 这些git技能够你用一年了
用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ...
- openstack问题汇总
No tenant network is available for allocation. No tenant network is available for allocation. 这个问 ...