chapter11:认识与学习bash之(1)认识shell与shell的变量功能

摘要:
使用终端的命令行是通过bash环境变量处理的。Bash还包括变量的设置和使用、Bash操作环境的构建、数据流的重定向和管道。1、 了解bash1的外壳。什么是外壳?我们通常通过shell与内核通信,因为内核要受到保护。也就是说,我们通过shell将命令与内核进行通信,这样崔就可以控制硬件来完成工作。事实上,shell只提供用户操作系统的接口,因此shell还需要传递

  使用终端的命令行就是通过bash 环境变量来处理的,bash还包括变量的设置与使用,bash操作环境的构建,数据流的重定向和管道等。

一,认识bash这个shell

1.什么是shell

  我们一般通过shell来和内核进行通信,因为内核是要保护的。也就是说通过shell将我们的命令与内核通信,好让崔可以控制硬件来完成工作。

  其实shell只是提供用户操作系统的一个接口,因此这个shell还要通过设备别的应用程序才好,比如我们用到的vim, fdisk等命令都是独立的应用程序,但是我们可以通过shell(也就是命令行模式)来操作它们,让这些程序调用内核来完成工作。

  所以我们可以说,只要能操作程序的接口都是shell,包括命令行模式与图形界面。

2.系统合法的shell与/etc/shells

  shell有不同的版本,我们的系统中也不只一个shell。如文件/etc/shells中的

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第1张

里面的bash是系统默认的。为什么我们系统上合法的shell会写入这个文件呢,因为系统的一些服务在运行的过程中,会去查看用户能够使用的shell。而这个查询就是通过/etc/shells这个文件。

  那么用户什么时候取得shell呢?在我们登陆的时候系统就会给我们一个shell,而这个shell是记录在/etc/passwd这个文件中。内容如下

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第2张

我们可以看到,取得的shell是/bin/bash.

  也就是说,当我们进入系统后,Linux就会根据/etc/passwd中的内容,给我们设置一个shell(默认是bash),然后我们就可以根据上面的命令来使用。

3.bash shell功能

  /bin/bash是Linux默认的shell,优点有:

(1)命令记忆功能

(2)命令与文件补齐功能

(3)命令别名功能(alias)

如我们设置下面的来代替 ls  -al命令

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第3张

我们可以通过type 来查看一个命令的类型。如

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第4张

(4)作业的前台后台控制

后台控制可以将工作放在后台,而不怕ctrl+C中断。

(5)程序脚本

shell  script的功能很强大。

 

二,shell的变量功能

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第5张

(1)什么是变量

  如上图,Linux是一个多用户多任务环境,每个人都有自己的bash,每个人都能执行mail来收发自己的邮件,那么bash怎么知道每个的邮箱是那个文件呢,这里就有一个MAIL这个变量。mail命令会主动去使用MAIL这个变量。如下

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第6张

系统已经帮我们定好MAIL变量。

影响bash环境操作的变量

  如前面说到的PATH变量,当在执行命令的时候就会通过PATH记录的路径来查找命令,如果找到则执行。

  正如上面据说,在进行bash之前,系统要有一些变量来提供它的数据访问,这就是环境变量了,例如PATH,MAIL,HOME等,为了区别与自定义变量的不同,环境变量使用大写。

(2)变量的显示与设置echo,unset

变量的显示:

echo $PATH  or echo ${PATH} 两种。

a.变量的设置

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第7张

如上所示,先确定chuiyuany变量还没有设置过,然后再设置,注意,等号两边没有空格。

b.如果在一串命令中还要别的命令提供信息

可以使用反单引号(是1,而不是真正的单引号)``或者$,如设置版本号:

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第8张

c.给一个变量增加内容

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第9张

增加也可以使用

version=${version}lisjs

d.变量想再其它进程使用

就要用export来使命令变为环境变量,上面的设置,如果我们再开一个shell就会发现version变量没有了,这里就要设置成环境变量,如下

还没有成功(并不是没有成功,是因为环境变量是存在到子进程中,要理解这句话)

通常大写为系统默认的变量,自己设置的可以使用小写。

e.取消变量unset

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第10张

反单引号的作用:

里面的命令会优先执行,其结果将作为外部的输入信息,如

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第11张

变量的一个有趣的应用,这样我们以后就可以很快的进行一个目录了。

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第12张

(3)环境变量的功能

有文件的查找等,使用env查看环境变量

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第13张

可以看到里面有很多环境变量,重要的有PATH,它是执行命令的查找路径。export也可以查看,但是它还有将一般变量设置成环境变量的功能。

用set查看所有的变量

里面有$(本shell的PID),?(上一个执行命令的回传码),我们可以使用echo $$ /echo %? 分别查看。

(4)export将自定义的变量设置成环境变量

子进程只能继承父进程的环境变量,而不会继承父进程的自定义变量。如果想让自定义变量变成环境变量,可以使用export。

 3.变量键盘的读取,数组与声明:read,array,declare

上面说到的变量的设置都是由命令行直接设置的,那是否可以由用户通过键盘输入呢,就像我们一般安装软件时的yes的输入。

(1)read

这种可以用在shell scripts里面。

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第14张

(2)declare/typeset

两者功能都是声明变量的类型。语法如

declare [-aixr] variable

-a:array类型

-i:整数类型

-x:与export一样,变成环境变量

-r:readonly

变量类型默认为字符串类(不指定的情况)。

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第15张

如果想将环境变量变成非环境变量,则用declare +x ariable,

注意,这里只是在一次登录中有效,如果想再次登录时还有效,只应该参考下一篇文章。

(3)数组

在写程序时可能才会用到。

4.与文件系统和程序的限制关系:ulimit

  为了防止很多用户同时使用很多资源,我们可以限制用户打开的文件数量,cpu时间,内存总量等。

chapter11:认识与学习bash之(1)认识shell与shell的变量功能第16张

5.变量内容的删除,替代与替换

免责声明:文章转载自《chapter11:认识与学习bash之(1)认识shell与shell的变量功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【二】、.net core 3.1 windows服务读取appsetting的步骤Netty (1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell命令之find的用法

最近面试的时候碰到了shell中问到find的问题,因此今天总结一下find的用法   1、find的应用场景   2、find的使用方法和参数解析 1、find的应用场景  首先我们回答一下find的应用场景。我个人觉得find可以和grep来进行对比分析。find是用来查找文件或者目录的,而grep是用来查找文件中的字符串的。 2、find的使用方法和...

shell中timeout实现

第一种 function timeout() { waitsec=$SLEEP_TIME ( $* ) & pid=$! ( sleep $waitsec && kill -HUP $pid ) 2>/dev/null & watchdog=$! # if command finished if wait $pid 2...

动态SQL的使用方法

一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现。   首先我们应该了解什么是动态SQL,在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句。所...

关于c语言中结构体的初始化

1、先定义结构体类型后再定义结构体变量; 格式为;struct 结构体名 变量名列表;   struct book s1,s2,*ss;//注意这种之前要先定义结构体类型后再定义变量; 2、在定义结构体类型的同时定义结构体变量; 格式为; struct 结构体名{成员列表;}变量名列表;//这里结构体名是可以省的,但尽量别省;struct book{cha...

awk命令使用方法

1、基本语法 awk '{pattern + action}' {filenames} awk语法中pattern表示在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。 2、awk原理 awk 对输入...

PgSql备份pg_dump与还原手记pg_restore(转)

真没有想到,以前一直是PostgreSQL使用者,突然需要库移植又成了头一招了!原来它与mysql命令行操作区别还挺大。不用怕,但绝对要细心,因为数据库操作是网站的核心,一旦出现损坏或丢失,后果就非常严重了。我先写了步骤,然后按计划进行,虽然也出现了错误,但最终还是安全移植了。这里记录在案,以备后用。备份还原方法:pg_dump和pg_restore,先仔...