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命令,红色字体的内容为输出的内容: # ...
随机推荐
- Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法 Some sites could ...
- 调试CRM JS开发
CRM 2013 的表单是一个IFrame,如果使用jquey来控制表单的话调试起来比较麻烦,如果直接使用浏览器(firefox)来开发和验证脚本可能会事半功倍. 首页列表页主窗体:var table ...
- Android 五大布局
Android 五大布局: FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),Table ...
- Microsoft Dynamics CRM 2013 --选项集的多选
由于从Microsoft Dynamics CRM 2011到Microsoft Dynamics CRM 2013,界面的风格发生了很大的变化 故原先在2011上开发的选项集多选在2013上面已经不 ...
- 原创:SAP LVC ALV编辑小技巧
前两天有个打印需求变更,需要在ALV显示列表中添加两个字段,可编辑,而我自己用的是函数:REUSE_ALV_GRID_DISPLAY_LVC 因为之前做可编辑基本都是固定套路,定义类,画屏幕.... ...
- org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused in android
给Manifest加网络权限<uses-permission android:name="android.permission.INTERNET"/>
- IOS 登陆界面的简单编写(通过NSNotificationCenter)
在介绍内容的之前,先看一下实现结果. 通过细节可以发现,只有当手机号与密码都输入的情况登录按钮才会变亮.那么这是怎么实现的呢? 首先我们要知道,这种情况的发生的首要条件便是每时每刻都知道两个TextF ...
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
官方建议AFN的使用方法 0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目 •2. 或使用Cocopod 导入AFNetworking3.0+ •3. ...
- iOS之UI--CAGradientLayer
1.CAGradientLayer 简介 如果说CAShapeLayer是用于提供设置形状的,那么CAGradientLayer是用于提供设置颜色的 英语单词:Gradient:梯度,渐变 那么Gra ...
- 分享git的常用命令
Git操作笔记 1.创建目录 $ mkdir learngit $ cd learngit 2.把新建的目录变成仓库 $ git ...