欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

认识shell

程序员文章站 2022-05-15 20:26:49
...

一、shell的初步认识
只要能够操作应用程序的接口都称为shell,狭义的shell是指命令行方面的软件,包括bash等。广义的shell则包括图形界面的软件,图形界面也可以操作各种应用程序来调用内核工作。

二、bash shell的功能
1.命令记忆功能
只要在命令行中按上下键就可以找到前/后执行过的命令
2.命令与文件补全功能
[Tab]键接在一串命令的第一个字的后面,为命令补全
[Tab]键接在一串命令的第二个字的后面,为文件补齐
3.命令别名设置功能
设置别名: alias 新名字=原名
例如:查看这个目录下的所有文件(包含隐藏文件)及所有文件的属性,直接以lm这个自定义的命令来替换上面的命令 alias lm=’ls -al’
4.作业控制、前台、后台控制
5.程序脚本
将平时管理系统需要执行的连续命令写成一个文件,该文件并且可以通过交互的方式来进行主机的检测工作。也可以通过shell提供的环境变量及相关命令来进行设计。整个设计下来就是一个小型的程序语言了。
6.通配符
除了完整的字符串之外,bash还支持许多的通配符来帮助用户查询与命令执行。举个例子,想要知道/usr/bin下面有多少以X开头的文件,使用“ls-l /usr/bin/X*”就可以知道。

三、bash shell的内置命令:type
通过type这个命令可以知道每个命令是否为bash的内置命令。
认识shell
参数:
type :不加任何参数,type会显示出name是外部命令还是bash内置命令
-t:type会将name以下面的字眼显示出它的意义:
file: 外部命令
alias: 该命令为命令别名所设置的名称
builtin: 该命令为bash内置的命令功能
-p:若后边接的name为外部命令时,才能显示完整文件名
-a:会有PATH变量定义的路径中,将所有含name的命令都列出来,包含alias
认识shell
四、shell的变量功能
1.变量的显示:echo
认识shell
其中,variable没有任何数据,echo可以用来读出变量的内容。
2.设置/修改变量的内容
认识shell
在bash中,当一个变量名称尚未设置时,默认的内容是空,在设置变量的时候也要注意一些规则。
变量设置规则:

* 变量与变量内容以“=”来连接,等号两边不能有空格字符
* 变量名称只能是英文字母与数字,数字不能是开头
* 变量内容有空格字符可使用双引号或单引号括起来
* 可用转义字符“\”将特殊符号(如[Enter]、$、\、空格、!等)变为一般字符
* 在一串命令中,还需要通过其他命令提供的信息,可以用反单引号"`命令`"或“$命令”
* 给该变量增加内容时,可用“$变量名称”增加内容
* 若该变量需要在其他子程序执行,需要以export来使变量变为环境变量
* 通常大写字符为系统默认变量,自行设置的可以使用小写字符
* 取消变量的方法为使用“unset变量名称”

认识shell

五、环境变量
用env就可以查看环境变量了
认识shell
* HOME:用户的主文件夹
* SHELL:目前环境使用的shell是哪个程序,Linux下默认的是/bin/bash的
* HISTSIZE:与历史命令有关,曾经执行过的命令可以被系统记录下来,记录的条数由这个值来设置
* MALL:在收信时系统会去读取的邮件信箱文件
* PATH:执行文件查找路径
* LANG:语系数据
* RANDOM:随机数的变量,随机数生成器在/dev/random中,可通过这个随机数文件的相关变量来随机取得随机数值。在BASH环境中,变量内容介于0~32767。
认识shell

 第二个是产生0~9的随机值。

* 用set查看所有变量

认识shell

* 查看本shell的PID

认识shell

* export:自定义变量转化为环境变量

环境变量与自定义变量的区别在于是否会被子进程所继续引用
子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量,因此,原本bash中的自定义变量在进入子进程会消失不见,一直到离开子进程并返回到原本的父进程后,这个变量才会出现

环境变量为什么会被子进程所引用?

* 当启动一个shell,操作系统会分配一记忆块给shell用,此内存内的变量可以让子进程取用
* 若在父进程利用export功能,可以让自定义变量的内容写在上述的记忆块当中
* 当加载另一个shell时,(即启动子进程,离开原本的父进程),子shell可以将父shell的环境变量所在的记忆块导入自己的环境变量块中

六、变量键盘读取、数组与声明:read,array,declare
1.read
读取来自键盘输入的变量
基本语法:
read [-p/t] variable
-p:后边可以接提示符
-t:后边可以接等待的秒数
read之后不加任何参数,直接加上变量名称,就会出现一个空白行等待输入。
2.declare/typeset
声明变量的类型
基本语法:
declare [-a/i/x/r] variable
-a:将变量定义为数组类型
-i:将变量定义为整数数字类型
-x:将变量定义为环境变量类型
-r:将变量设置为readonly类型,不可更改,不可重设
3.数组(array)变量类型
基本语法:
var[index]=值
读取时用$读取

七、变量内容的删除、替代、替换
变量内容删除与替换
认识shell
八、命令别名与历史
1.命令别名设置:alias,unalias
alias 新名字=旧名字
unalias 新名字
例题:DOS年代,列出目录与文件就是dir,而清除屏幕就是cls,那么我们想在linux里面也使用相同的命令呢?
alias cls=’clear’
alias dir=’ls -l’
2.历史命令:history
history [n]
history [-c]
history [-r/a/w] histfiles
参数:
n:数字,列出最近的n条命令行
-c:将目前shell中的所有history内容全部清除
-a:将目前新增的history命令新增入histfiles中,若没有加histfiles,则写入默认的~/.bash_history
-r:将histfiles的内容读到目前这个shell的history中
-w:将目前的history记忆内容写入histfiles中

九、管道命令
假设我们需要知道/etc/下面有多少文件,可以利用ls/etc来查阅,但是,由于该文件目录下的文件太多,屏幕会占满,不知道前面输出的内容是什么,此时我们可以通过less命令协助,利用:ls -al /etc | less
这样,ls命令输出后的内容就能够被less读取,并且利用less的功能,就可以前后翻动相关的信息了。
其实,管道命令仅能处理前面一个命令传来的正确信息,对错误信息没有接受能力。

十、选取命令:cut,grep
1.cut
基本语法:
cut -d’分隔字符’ -f fields 用于分隔字符
cut -c 字符范围 用于排列整齐的信息
参数:
-d:后边接分隔字符,与-f一起使用
-f:依据-d的分隔字符将一段信息切割成数段,用-f取出第几段
-c:以字符的单位取出固定字符区间
cut主要的用途在于将同一行里面的数据进行分解,最长使用分析一些数据或文字数据的时候。
2.grep
基本语法:
grep [-a/c/i/n/v] [–color=auto] ‘查找字符串’ filename
参数:
-a:将binary文件以text文件的方式查找数据
-c:计算找到‘查找字符串’的次数
-i:忽略大小写的不同
-v:反向选择,显示没有‘查找字符串’内容的那一行
–color=auto:将找到的关键字部分加上颜色显示

十一、排序命令:sort,wc,uniq
1.sort
基本语法:
sort [-f/b/M/n/r/t/u/k] [file or stdin]
参数:
-f:忽略大小写
-b:忽略前面空格符
-M:以月份的名字来排序
-n:使用纯数字来排序
-r:反向排序
-t:分隔符,默认使用[Tab]来分隔
-u:相同的数据只出现一行
-k:以field来进行排序
2.uniq
排序完成后,将重复的数据仅列出一个显示
基本语法:
uniq [-i/c]
-i:忽略大小写的不同
-c:进行计数
3.wc
计算输出信息的整体数据
基本语法:
wc [-l/w/m]
-l:仅列出行
-w:仅列出多少字
-m:多少字符

十二、双向重定向:tee
我们知道>会将数据流整个传送给文件或设备,因此我们除非去读取该文件或设备,否则无法继续利用这个数据流,而tee就可以将这个数据流的处理过程中将某段信息存下来。
基本语法:
tee [-a] file
-a:以累加的方式,将数据加入file中
tee可以将输出转存一份到文件内并以同样的数据继续送到屏幕去处理。除了可以让我们同时分析一份数据并记录下来之外,还可以作为处理一份数据的中间暂存盘记录之用

相关标签: shell bash