《鸟哥的Linux私房菜》笔记整理Part.1

一、认识bash这个shell

操作系统就是一组软件,由这组软件在控制整个硬件爱你与管理系统的活动检测,如果这组软件能被用户随意的操作,那么当使用者使用不当的时候,就会使整个系统崩溃。所以用户可以透过应用程序来指挥kernel,让kernel完成我们需要的硬件任务。

也就是说,只有能够操作应用程序的借口都能被称为壳(shell)程序。狭义的壳程序指的是指令行方面的软件,包括bash。广义的shell泽包括了图形接口的软件,因为图形接口其实也能够操作各种应用程序来调用内核工作。

通过在/etc/shells文件,我们就可以看到自己的linux下面有几个可用的shells。例如我的是:

/bin/sh

/bin/bash(Linux默认的shell)

/bin/rbash

/bin/dash

bash有以下几I个有点

(1)命令记忆能力。

(2)命令与文件补全功能(Tab案件)。使用Tab的作用:

①Tab接着一串命令的第一个字后面,则为命令补全;

②Tab接着一串命令的第二个字后面,则为文件补全;

③若安装了bash-completion软件,则在某些命令后面使用Tab的时候,可以执行“选项/参数补全”功能。

(3)命令别名设置功能(alias)。比如我们可以使用“lm”来代替“ls -al”,那么我们可以使用下面的命令:

alias lm =’ls -al’

(4)作业控制、前台、后台控制。使用前台、后台的控制可以让作业进行得更为顺利。至于作业控制,可以让我们随时将工作丢到后台去执行,而不怕使用Ctrl+C来中断该程序,也可以在单一登录的环境中达到多任务的目的。

(5)程序脚本。

(6)通配符:使用通配符来匹配想要的文件。

另外,我们还可以使用type命令来查询命令是否为Bash shell的内置命令。使用格式如下:

如果命令太长,我们可以使用两行输出,只需要在线要切换到第二行的地方输入一个“\”然后敲回车即可。

另外,如果命令特别长,或者输入了一串错误的命令时,你想要快速将这个命令删除掉,可以用一下组合键:

二、shell的变量功能

变量是以一组文字或符号等,来取代一些设置或者一串保留的数组。

1.变量的取用与设定:echo,变量设定规则,unset

使用echo进行变量取用的格式如下所示:

[dmtsai@study ~]$ echo $

使用echo进行变量的设定:

[dmtsai@study ~]$ echo $

[dmtsai@study ~]$ myname=xiaoao

变量的设置规则:

(1)变量与变量内容以“=”相连接。

(2)等号两边不能直接接空格。例如myname = xiaoao是错误的。

(3)变量名称只能是英文与数字,但是开头字符不能是数字。

(4)变量内容若有空格,可使用双引号或单引号将内容结合起来,他们有以下不同:

①双引号内的特殊字符如$等,可以保有原来的特性。例如

『var=”lang is $LANG”』,则『echo $var』可得『lang is zh_TW.UTF-8』。

②单引号内的特殊字符仅为一般字符,例如

『var=’lang is $LANG’』,则『echo $var』可得『lang is $LANG』。

(5)可用转义字符“\”将特殊符号(例如Enter、$、\、空格符、‘等)变成一般字符。

(6)在一串命令的执行中,还需要通过其它的命令提供的信息,可以使用反单引号“”或“$(指令)”。特别注意,那个`是键盘上方的数字键1左边那个按键。

(7)若该变量为了增加变量内容时,可以使用“$变量名称”或“${变量}”来累加内容。

(8)若改变量需要在其它子程序运行,则需要以export来使变量变成环境变量。

(9)通常大写字母为系统默认变量,自行设置的变量可以使用小写字母,方便用户判断。

(10)取消变量的方法为使用unset。使用方式为“unset变量名称”。

下面做一个小练习,如图2.1所示。

图2.1 练习图

2.环境变量的功能

(1)用env观察环境变量。在终端情况下,输入env,可以得到当前系统下所有的环境变量及其内容。

常用的几个环境变量说明如下:

(2)用set观察所有变量(含环境变量和自定义变量)

在系统变量中,比较重要的有以下几个:

①PS1(提示字符的设置)。这个东西就是我们的“命令提示字符”。

②$(关于本shell的PID):目前这个Shell的线程带好,也就是所谓的PID(Process ID)。

③?(关于上个执行命令的回传码):上一个执行的指令回传的值。

④OSTYPE,HOSTTYPE,MACHTYPE(主机硬件与内核的等级)

(3)export:自动将变量转为环境变量。

3.影响显示结果的语系变量(locale)

我们可以通过使用“locale -a”命令获取我们的Linux支持多少种语系。

如果其他的语系变量都未设定,且你有设定LANG或者是LC_ALL时,则其他的语系变量就会被这两个变量所取代。

4.变量的有效范围

环境变量=全局变量;自定义变量=局部变量。

5.变量键盘读取、数组与声明:read、array、declare

(1)read

要读取来自键盘输入的变量,就是用read。read的语法如下:

read之后不加任何参数,直接加上变量名称,那么底下就会主动出现一个空白行等待你的输入。如果加上-t后面接秒数,那么指定秒数之内没有任何动作时,该指令就会自动略过。如果是加上-p,在输入的光标前就会有比较多可以用的提示字符给我们参考。

(2)declare/typeset

声明变量的类型。如果declare后面没有接任何参数,那么bash就会主动将所有变量名称与内容通通调出来。declare用法如下:

注意以下两个事项:

①变量类型预设为字符串,所以若不指定变量类型,那么就会直接现实出来。

②bash环境中的数值计算只能计算整形。

(3)数组变量类型

在bash里面,数组的设置方式为:var[index]=content

例如:

6.与文件系统及程序的限制关系:ulimit

我们的bash可以“限制使用者的某些系统资源”,包括打开文件的数量、可以使用的CPU时间、可以使用的内存总量等。使用方式如下:

注意:

想要复原ulimit的设定最简单的方法就是注销再登入,否则就是得要重新以ulimit设定才行!不过,要注意的是,一般身份使用者如果以ulimit设定了-f的文件大小,那么他『只能继续减小文件容量,不能增加文件容量喔!』另外,若想要管控使用者的ulimit限值,可以参考第十三章的pam的介绍

7.变量内容的删除、替代和替换

(1)变量内容的删除去替换

以下面来说明:

所以:

#是符合替换文字“最短”的那一个;##是符合替换文字的“最长”的那一个。

如果是从右往左看,就用%。例如

总的来说,有以下几点:

(2)变量的测试与内容替换

在某些时候,我们需要判断某个变量是否存在,若存在则使用既有设置,否则就赋予一个固定设置。如下所示:

具体设置如下:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190217G0YHI300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券