认识与学习bash

我们知道操作系统的内核是管理硬件软件资源的一组软件,由于这个内核是需要保护的,不能被用户随意改变,我们需要通过应用程序来实现和内核通信。
那么,shell就是实现应用程序和内核通信的接口。我们常用的命令cd等就是应用程序,shell就是我们的命令行界面(广义的说shell还包括图形界面,但我们主要学习命令行)。而bash就是我们linux主机的默认shell,还有其他的shell包括sh,csh等。我们可以通过cat etc\shells查看我们的linux有多少个可用shell.

1.bash shell的功能优点

(1)命令记忆能力。就是说我们按键盘上的上下键,就可以出现我们之前输入过的命令,记忆数量可达1000次,也就是说我们每次输入的命令其实都是有被记录的。
那么,记录在哪呢?记录在bash_history中,这个好处就是我们可以知道之前的操作步骤,在以后的查错过程可以查看。不过,记录的是上一次的操作记录,这一次的先暂存在内存中,下次登录时才会记录。
(2)命令补全功能,在之前说过,只要按两次Tab就可以补全命令和文件,十分方便。
(3)命令别名设置功能(alias)可以自定义命令,比如alias diy=‘cat’

(4) 作业控制,前台后台控制。我们可以把作业放到后台,不用crtl+c中断进程。
(5)程序脚本(shell script)。可以把你管理系统时常用的一串命令写成文件,该文件可以通过交互的方式对主机进行检测。具体的后面再说。
(6)通配符。也就是正则表达式。比如*代表零或任意多个字符。

.bash的内置命令
我们可以通过type 命令查看该命令是否是Bash的内置命令。
当命令太长时,我们可以输入\,表示输入回车后下一行仍然是输入,不是执行。

2.shell的变量功能
由于linux是多任务多用户的环境。每个人登录都会得到一个bash,每个人后可以使用mail命令收取邮件,那么bash如何知道你的邮箱是哪个文件呢,这就需要用到变量了。
变量我们太熟悉了,就是让某个特定的字符串代表不固定的内容。

对于系统来说当我们输入mail这个命令时,系统就规划好了一个MAIL变量,当root登录时,变量为var/mail/root,当user登录时,变量是var/mail/user
这极大方便了我们的使用,只需要输入mail就可以。

echo,unset实现变量的显示和取消。
比如:
name=iii;
echo $ name就可以显示iii,unset name就可以取消这个变量。
单引号双引号也有区别,单引号不顾及特殊字符。
比如:
name=iii;
my="$ name is me"
echo $ my会显示iii is me,而单引号的话就会显示$name is me不改变任何内容。

比如,当我们需要经常去一个名字很长的目录,我们可以通过变量a存储这个目录名,下次只要cd $a就可以了。

3.环境变量的功能
环境变量可以实现主文件夹的变换,提示符的显示,执行文件查找的路径等。
我们可以用env,export来查看系统有多少个环境变量。我们说一下几个环境变量。(一般用大写字母表示环境变量)
HOME:用户的主文件夹/root,我们使用cd~或cd 就可以回到主文件夹。我们会经常见到$HOME这个东西。
SHELL:表示shell用的是哪个程序,我们linux默认的bash就是bin/bash
HISTSIZE:表示记录历史命令的条数,和前面说的命令记忆功能有关。
MAIL:邮箱地址
PATH:执行文件的查找路径,目录与目录之间用:分割。
LANG:存储的语系数据,比如我们启动某些别的语言编写的文件,如果语系数据中没有对应的编码,就会出现错误。
自定义变量
对于我们自定义的变量或和操作系统接口相关的变量可以用set命令显示。
说几个重要的:
PS1:提示符的设置。提示符就是我们每次输入命令之前的字符,这个字符是可以通过PS1=’…'改变的。
$:很神奇,
$本身亦是一个变量。表示目前shell的线程代号。可以用echo $ $查看
?:表示上一个命令的回传码,正确为0

那么环境变量和自定义变量区别是什么呢,只有大小写的区别吗?不是。环境变量可以被子进程继承,而自定义变量 不行,这就相当于全局变量和局部变量的区别。如果想要自定义变量也被继承,就要使用export 变量将其改变为系统变量。
而将环境变量转成自定义变量可以用declare.

declare/typeset
功能是声明变量的类型。如果后面不加任何参数,就是和set一样,显示所有变量和其值。
declare [-aixr] 变量
a将变量设置为数组类型
i将变量设置为整形数字
x将变量设置为环境变量 和export一样
r将变量设置为只读类型,不能更改

ulimit:限制用户可以使用的系统资源,比如可打开的最大文件数,占用cpu时间,可使用的内存总量等

4、数据流重定向
我们输入命令后,信息会显示到屏幕上,我们如果想信息加载到一个文件中,我们就可以使用>来重定向。后面加上文件名,如果这个文件不存在就会新建一个,存在就会覆盖原来的内容。如果想在后面追加,就使用>>,就不会覆盖了。
如果是错误信息输出重定向,就要使用2>,2>>.
同理,输入重定向用<,代表可以用文件内容代替键盘输入。<<后面加一个字符串,代表结束输入,不用crtl+d结束输入了。
这个在一些输出信息很重要时需要保存,就会派上用场。

tee是双向重定向,除了加载到文件中,还要显示到屏幕上。

5.命令执行的判断依据;,||&&
很多时候,我们希望一次输入执行多个命令,有什么办法呢?除了之前说的用shell script,还有以下办法
cmd;cmd用分号间隔,可以执行多个没有相关性的命令。
如果有相关性的话
cmd&&cmd:当前一个命令正确,执行下一个命令,不然下一个命令不执行
cmd||cmd:当前一个命令正确,后一个不执行,不然下一个执行

6.管道命令|
如果我们希望数据要经过很多次处理才能出现。这和连续执行命令不太一样。
比如我们用ls -al /etc显示出所有文件时,数据太多,我们可以用
ls -al /etc | less,这样就可以前后翻页了。
管道就是把前一个的标准输出当成下一个的标准输入。这就意味着,管道后面的第一个命令必须是能够读取标准输入的命令,比如head,tail,less,more(more只能向后翻页)等。cp,ls就不行。并且对于错误输出是不处理的。
grep,cut,split等都是很优秀的管道命令,帮助我们分析内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值