一次执行很多命令,可以用;分割每个命令,依次运行所有命令。但是不是进程列表,要用()包围命令才是进程列表。它们有什么差别呢?进程列表是启动了一个子SHELL来执行的。用echo $BASH_SUBSHELL可以查看是否是子shell执行。echo $BASH_SUBSHELL执行结果是0时没有生成子SHELL,大于零则是子SHELL执行。

sleep n 睡眠n秒。

在命令后加入&让命令在后台运行。



在方括号里面的是job id,第二个参数是pid(进程id)。

jobs查看后台作业信息。



返回值分别代表job id,运行状态,命令



让进程列表后台运行

协程

协程可以同时做两件事。它在后台生成一个子 shell,并在这个子shell中执行命令。使用coproc命令。



给协程起个名字。必须确保在第一个花括号{ 和命令名之间有 一个空格。还必须保证命令以分号(; )结尾。 另外,分号和闭花括号(} )之间也得有一个空格。默认名字是COPROC

内部命令和外部命令

外部命令:文件系统命令,是存在于bash shell之外的程序。外部命令程序通常位 于/bin、/usr/bin、/sbin或/usr/sbin中。

当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking)。外部命令ps 很方便显示出它的父进程以及自己所对应的衍生子进程。

内建命令:和外部命令的区别在于前者不需要使用子进程来执行。它们已经和shell编译成了一 体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。

因为既不需要通过衍生出子进程来执行,也不需要打开程序文件,内建命令的执行速度要更快, 效率也更高。

有些命令有多种实现。例如echo 和pwd 既有内建命令也有外部命令。两种实现略有不同。要查看命令的不同实现,使用type 命令的-a

选项。

内建命令history

通常历史记录中会保存最近的1000条命令。你可以设置保存在bash历史记录中的 命令数。要想实现这一点,你需要修改名 为HISTSIZE 的环境变量

你可以唤回并重用历史列表中最近的命令。这样 能够节省时间和击键量。输入!! ,然后按回车键就能够唤出刚刚用过的那条命令来使用。

命令历史记录被保存在隐藏文件.bash_history中, 它位于用户的主目录中。这里要注意的是,bash 命令的历史记录是先存放在内存中,当shell退出时才被写入到历史文件中。可以在退出shell会话之前强制将命令历史记录写 入.bash_history文件。要实现强制写入,需要使用history 命令的-a 选项。

如果你打开了多个终端会话,仍然可以使用history -a 命令在打开的会话中 向.bash_history文件中添加记录。但是对于其他打开的终端会话,历史记录并不会自动更新。这是因为.bash_history文件只有在打开首个终端会话时才会被读取。要想强制重新读 取.bash_history文件,更新终端会话的历史记 录,可以使用history -n 命令

你可以唤回历史列表中任意一条命令。只需输入惊叹号和命令在历史列表中的编号即可。

环境变量

存储有关shell会话和工作环境的信息。分为全局变量和局部变量。

全局变量:对于shell会话和所有生成的子shell 都是可见的。可通过env和printenv查看。





显示个别环境变量的值,可以使用printenv 命令,但是不要用env命令。



可以使用echo显示变量的值。在这种情况下引用某个环境变量的时候,必须在变量前面加上一个美元符($ )

局部变量:对创建它们的shell可见。

set 命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。它还会按照字母顺序对结果进行排序

用户定义变量



变量名、等号和值之间没有空格,这一点非常重要。如果在赋值表达式中加上了空格, bash shell就会把值当成一个单独的命令

通过export将局部变量变成全局变量。

修改子shell中全局环境变量并不会影响到父shell 中该变量的值:

使用unset删除环境变量:

在子shell中删除全局变量后, 你无法将效果反映到父shell中:

默认的bash shell环境变量:

https://blog.csdn.net/tysonchiu/article/details/125831810

PATH环境变量:用于进行执行命令和程序查找的目录

环境变量的持久化:

在你登入Linux系统启动一个bash shell时,默认情况下bash会在几个文件中查找命令。这些文件叫作启动文件或环境文件。bash检查的启动文件 取决于你启动bash shell的方式。启动bash shell有3种方式:

  • 登录时作为默认登录shell
  • 作为非登录shell的交互式shell
  • 作为运行脚本的非交互shell

1.登录SHELL

登录shell会从5个不同的启动文件里读取 命令:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

/etc/profile文件:/etc/profile文件是bash shell默认的的主启动文件。

/etc/profile文件用到了一个特性:for语句。它用来迭代/etc/profile.d目录下的所有文件。

\(HOME目录下的启动文件:
提供一个用 户专属的启动文件来定义该用户所用到的环境变量。
大多数Linux发行版只用这四个启动文件中的一到两个:
\)HOME/.bash_profile

\(HOME/.bashrc
\)HOME/.bash_login

$HOME/.profile

shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略:

\(HOME/.bash_profile
\)HOME/.bash_login

\(HOME/.profile
这个列表中并没有\)HOME/.bashrc文件。 这是因为该文件通常通过其他文件运行的。

交互式shell进程:

如果bash是作为交互式shell启动的,它就不会访问/etc/profile文件,只会检查用户HOME目录中的.bashrc文件。



.bashrc文件有两个作用:一是查看/etc目录下通用 的bashrc文件,二是为用户提供一个定制自己的 命令别名和私有脚本函数的地方。

非交互式shell:

系统执行shell脚 本时用的就是这种shell。,bash shell提供了BASH_ENV 环 境变量。当shell启动一个非交互式shell进程时, 它会检查这个环境变量来查看要执行的启动文 件。如果有指定的文件,shell会执行该文件里的 命令,这通常包括shell脚本变量设置。

子shell可以继承父shell导出过的变量.

环境变量持久化:对全局环境变量来说可能更倾向于将新的或修改过 的变量设置放在/etc/profile文件中。最好是在/etc/profile.d目录中创建一个以.sh结尾的文件。存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。

数组变量:要给某个环境变量设置多个值,可以把值放在括 号里,值与值之间用空格分隔。



删除指定下标的元素,数组长度并没有变短,而是制定下标的元素设为空。

Linux-shell笔记1的更多相关文章

  1. Linux Shell 笔记

    1.查看进程的环境变量 普通:$cat /proc/1642/environ  换行:$cat /proc/1642/environ | tr '\0' '\n' tr的命令格式是tr SET1 SE ...

  2. 【转】Linux shell笔记

    由于工作的需要,越来越多的接触到linux系统.最近看了<Linux与Unix Shell>这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅. No.001 文件安全与权 ...

  3. LINUX SHELL 笔记 01: 脚本

    root@iZwz:~/labs# vim myfirst root@iZwz:~/labs# cat myfirst #!/bin/bash clear echo "this is my ...

  4. day 2 Linux Shell笔记

    ------------------------------------------------------------------- -------------------------------- ...

  5. LINUX SHELL 笔记 02: 变量初识

    https://www.shellscript.sh/variables1.html 变量是一个可操作(读.写)的内存块的名字. 尝试-1 创建一个变量: root@iZwz:~/labs# sh m ...

  6. Linux Shell脚本攻略 读书笔记

    Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...

  7. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  8. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  9. 读书笔记--Linux Shell脚本攻略

    总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理到远程ssh等等,都给出来作者挑选 ...

  10. linux shell脚本攻略笔记

    前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符  echo -e "\e[1:41m" 1表示背景色   2 ...

随机推荐

  1. 区分 python 爬虫或者是写自动化脚本时遇到的 content与text的作用

    通常在使用过程中或许我们能够轻而易举的会使用requsts模块中的content 与 text ,从print结果来看根本看不出任何区别: 总结精髓,text 返回的是unicode 型的数据,一般是 ...

  2. 2 Elment Ui 日期选择器 格式化问题

    Elment Ui 日期选择器 格式化问题 在前后端联调过程中 我们常常会遇到日期无法被反序列化 这个问题 会有点头疼 下面以我这边为例 后端使用的是springboot 默认集成了jackjson ...

  3. Docker-配置华为云加速

    到网址点击立即使用 https://www.huaweicloud.com/intl/zh-cn/product/swr.html 登录后进入镜像服务 按要求操作即可 相关命令 vi /etc/doc ...

  4. 跟着Vam一起学习Typescript(第一期)

    一.安装环境与配置1.命令行安装 npm i -g typescript 2.快捷打开Vs Code编辑器 创建一个项目文件夹,在该文件夹下打开命令行工具,使用code .命令快速打开编辑器(如果计算 ...

  5. 关于Vue移动端框架(Muse-UI)的使用(说明书,针对不愿看文档的童鞋)

    一.安装 1.npm安装 npm i muse-ui -S 或者 CDN安装 <link rel="stylesheet" href="https://unpkg. ...

  6. JavaScript写倒计时

    在网页中,特别是电商网站中,倒计时的出现频率很高,接下来给大家介绍一下怎么用JavaScript写一个倒计时.代码如下: 首先我们通过Date构造函数的方法创建一个倒计时的结束的时间.并将其转换为毫秒 ...

  7. bat-设置oracle服务

    1.停止oracle所有服务 并将服务设置为手动启动 @echo off echo oracle服务--------停止 net stop OracleVssWriterORCL net stop O ...

  8. windows10 安装MySQL ZIP版本

    今天重新学习了一下MySQL,但是呢刷题网站不知道为什么很卡,输入容易卡死崩溃,于是乎想在win10上面进行安装进行练习. 发现电脑里面没有,于是进行安装. 1.首先下载MySQL https://d ...

  9. SpringBoot自定义starter开发分布式任务调度实践

    概述 需求 在前面的博客<Java定时器演进过程和生产级分布式任务调度ElasticJob代码实战>中,我们已经熟悉ElasticJob分布式任务的应用,其核心实现为elasticjob- ...

  10. SpringBoot开发 - 什么是热部署和热加载?devtool的原理是什么?

    在SpringBoot开发调试中,如果我每行代码的修改都需要重启启动再调试,可能比较费时间:SpringBoot团队针对此问题提供了spring-boot-devtools(简称devtools)插件 ...