Bash的基础特性(1)

1.命令历史history

环境变量;

HISTSIZE:命令历史记录的条数;

HISTFILE:~/.bash_history

HISTFILESIZE;命令历史文件记录历史的条数;

调用上一条命令的最后一个参数:

!$

控制命令记录的方式:

环境变量:HISTCONTROL

   ignoredups;忽略重复的命令;连续且相同方为重复;

   ignorespace:忽略所有以空白开头的命令;

   ignoreboth:ignoredups,ignorespace;

修改环境变量值的方式:export 变量名=“值”

   变量赋值:把赋值符号后面的数据存储于变量名指向内存空间;

history其它用法在计算机基础章节也写过,就此略过

2.命令补全

Bash执行命令:

内部命令;

外部命令:bash根据PATH环境变量定义的路径,自左向右在每个路径搜寻以给定命令命名的文件,第一次找到即为要执行的命令;

 

直接补全:Tab,用户给定的字符串只有一条唯一对应的命令;

以用户给定的字符串为开头对应的命令不唯一,则再次Tab会给出列表;

3.路径补全

把用户给出的字符串当做路径开头,并在其指定上级目录下搜索已指定的字符串开头的文件名;

如果唯一:则直接补全。否则;再次Tab,给出列表;

4.命令行展开

~:展开为用户的主目录;

~USERNAME:展开为指定用户的主目录

{}:可承载一个以逗号分隔的列表,并将其展开为多个路径

/tmp/{a,b}=/tmp/a,/tmp/b

/tmp/{tom,jerry}/hi=/tmp/tom/hi,/tmp/jerry/hi

5.命令的执行结果

成功

失败

Bash使用特殊变量$?保存最近一次命令的执行状态结果:

0:成功

1-255:失败

echo$?

Linux自学笔记——bash的基础特性_第1张图片

 

Bash基础特性(2)

1.命令别名(alias)

通过alias命令来实现:

1)alias

显示当前shell进程所有可用的命令别名;

2)alias NAME=‘VALUE’

note:在命令行中定义的别名,仅对当前的shell进程有效;如果想要永久有效,要定义在配置文件中;

仅对当前用户有效:~/.bashrc

对所有用户有效:/etc/bashrc

Linux自学笔记——bash的基础特性_第2张图片

Note:编辑配置不会立即生效,需要bash进程重新读取配置文件:

   Source  /path/to/config_file

   . /path/to/config_file

撤销别名:unalias

unalias [-a] name [name...]

Linux自学笔记——bash的基础特性_第3张图片

note:如果别名同原命令的名称,则要执行原命令,可以使用”\COMMAND”

2.glob(globbing)

bash中用于实现文件名“通配”

通配符:*,?,[]

1)*:任意长度的任意字符

2)?:任意单个字符

3)[]:匹配指定范围内的任意单个字符

[0-9]:0-9之间任意一个值;

[a-z]:不区分大小写;

4)[^]:匹配指定范围外的任意单个字符

[^0-9]:除了0-9以外的任意单个字符;

  

   专用字符集合:

      [:digit:]:任意数字,相当于0-9;

      [:lower:]:任意小写字母

      [:upper:]:任意大写字母

      [:alpha:]

      [:alnum:]:任意数字

      [:space:]:空格

      [:punct:]:标点符号

练习:

1)显示/var目录下所有以1开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;

wKioL1nAcWihoZ-_AAATNzuACCs446.png-wh_50

2)显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;

wKiom1nAcaPjtSuMAAARwayZiWs337.png-wh_50

3)显示/etc/目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录;

wKioL1nAcXry-VvpAAAeT2ygB5Y340.png-wh_50

4)复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/claude目录中

Linux自学笔记——bash的基础特性_第4张图片

5)复制/etc目录下,所有以.d结尾的文件或目录至/tmp/claude目录中;

Linux自学笔记——bash的基础特性_第5张图片

6)复制/etc目录下,所以有.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/claude目录中;

wKioL1nAcaSC-N-mAAA2m77xmxs427.png-wh_50

3.Bash的快捷键

Ctrl+l:清屏,相当于clear

Ctrl+a:跳转至命令开始处;

Ctrl+e:跳转至命令结尾处;

Ctrl+c:取消命令的执行;

Ctrl+u:删除命令行首至光村所在处的所有内容;

Ctrl+k:除光标所在处至命令行尾部的所有内容;

4.Bash的I/O重定向及管道

程序:指令+数据

读入数据:input

输出数据:output

打开的文件都由一个fd:filedescription(文件描述符)

标准输入:keyboard,0

标准输出:monitor,1

标准错误输出:monitor,2

 

I/O重定向:改变标准位置

输出重定向:COMMAND > NEW_POS, COMMAND >>NEW_POS

>:覆盖重定向,目标文件中的原有内容会被清除;

>>:追加重定向,新内容会追加至目标文件尾部;

#set–C:禁止将内容覆盖输出至已有文件中;

   强制覆盖:>|

 

2>:覆盖重定向错误输出数据流;

2>>追加重定向错误输出数据流;

 

标准输出和错误输出各自定向至不同位置:

   COMMAND> /path/to/file.out 2> /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向:

   &>:覆盖重定向

   &>>:追加重定向

   另一种方法:

   COMMAND> /path/to/file.out 2> &1

   COMMAND>> /path/to/file.out 2>> &1

输入重定向:<

tr命令:转换或删除字符

   tr [OPTION]... SET1[SET2]

   HERE Documentation:<<

       cat << EOF

       cat >/path/to/somefile << EOF

   管道:

   COMMAND1 | COMMAND2 | COMMAND3 |...

Note:最后一个命令会在当前shell进程的子shell进程中执行;

tee命令:

      tee [OPTION]... [FILE]...

  

练习:

1.将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;

wKioL1nAcc3Ap_j9AAAsFNBBHi0414.png-wh_50

2.将登录至当前系统上的用户信息中的后3行的信息转换为大写后保存/tmp/who.out文件中;

wKiom1nAcgnyNGjFAAAWUsZHre4075.png-wh_50

 

Bash的基础特性(3)

1、提供了编程环境

   程序:指令+数据

   程序编程风格:

      过程式:以指令为中心,数据服务于指令

      对象式:以数据为中心,指令服务于数据

   shell程序:提供了编程能力,解释执行

   程序的执行方式:

      计算机:运行二进制指令;

      编程语言:

        低级:汇编

        高级:

           编译:高级语言-->编译器-->目标代码

              C、C++, java

           解释:高级语言-->解释器-->机器代码

              shell, perl, python

   过程式编程:

      顺序执行

      循环执行

      选择执行

      shell编程:过程式、解释执行

        编程语言的基本结构:

           数据存储:变量、数组

           表达式

           语句

shell脚本:文本文件

      shebang

        #!/bin/bash

        #!/usr/bin/python

        #!/usr/bin/perl    

      magic number: 魔数

      运行脚本:

        1、给予执行权限,通过具体的文件路径指定文件执行;

        2、直接运行解释器,将脚本作为解释器程序的参数运行;

   变量:

      命名的内存空间;

      数据存储方式:ASCII

        字符:110:24

        数值:110--> 8

           整型

           浮点型

      变量:变量类型

        作用:

           1、数据存储格式;

           2、参与的运算;

           3、表示的数据范围;

      类型:

        字符

        数值:

           整型

           浮点型

      编程程序语言:

        强类型:

        弱类型:bash

           把所有要存储的数据统统当作字符进行

           不支持浮点数;

      逻辑运算:

        true, false

        1, 0

        与:

           1 && 1 = 1

           1 && 0 = 0

           0 && 1 = 0

           0 && 0 = 0

        或:

           1 || 1 = 1

           1 || 0 = 1

           0 || 1 = 1

           0 || 0 = 0

        非:

           ! 1 = 0

           ! 0 = 1

      短路运算:

        与:

           第一个为0,结果必定为0;

           第一个为1,第二个必须要参与运算;

        或:

           第一个为1,结果必定为1;

           第一个为0,第二个必须要参与运算;

 

Bash的基础特性(4)

变量类型:

   数据存储格式、存储空间大小、参与运算种类;

   字符型;

   数值型:

      整型;

      浮点型;

   强类型:定义变量时必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误;

   弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用;

Bash中变量的种类:

   根据变量的生效范围等标准;

本地变量:生效范围为当前shell进程;队当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;

环境变量:生效范围为当前shell进程的及其子进程;

      局部变量:生效范围为当前shell进程中某代码片段(通常指函数);

      位置变量:$1,$2,…来表示,用于让脚本在脚本代码中调用通过命令传递给它的参数;

      特殊变量:$?,$0,$*,$@,$#

   本地变量:

      变量赋值:name=‘value’可以使用引用

        Value

1)可以直接是字符串;name=“username”

2)变量引用:name=“$username”

3)命令引用:name=’COMMAND’,name=$(COMMAND)

变量引用:${name}, $name

    "":弱引用,其中的变量引用会被替换为变量值;

    '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串;

显示已定义的所有变量:set

Linux自学笔记——bash的基础特性_第6张图片

销毁变量:unset name

   环境变量:

      变量声明、赋值;

        export name=VALUE

        declare –x name=VALUE

      变量引用:$name,${name}

      显示所有的环境变量:export,env,printenv

      Linux自学笔记——bash的基础特性_第7张图片

      销毁:unset name

      Bash有许多內建的环境变量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,HISTFILE,PS1

   变量命名规则:

1)不能使用程序中的保留字:例如if,for;

2)不能使用数字、字母及下划线,且不能以数字开头;

3)见名知意;

 

只读变量:

readonly name

declare –r name

位置变量:

在脚本代码中调用通过命令行传递给脚本的参数;

$1,$2,…:对应调用第1、第2等参数;

    Shift[n]

$0:命令本身;

$*:传递给脚本的所有参数;

$@:传递给脚本的所有参数;

$#;传递给脚本的参数的个数

示例:判断给出的文件的行数; 

Bash的配置文件:

   按生效范围划分,存在两类:

      全局配置:

        /etc/profile

        /etc/profile.d/*.sh

        /etc/bashrc

      个人配置;

        ~/.bash_profile

        ~/.bashrc

   按功能划分存在两类:

      Profile类:为交互式登录的shell提供配置

        全局:/etc/profile,/etc/profile.d/*.sh

        个人:~/.bash_profile

        功用:

1)用于定义环境变量;

2)运行命令或脚本;

Bashrc类:为非交互式登录的shell提供配置

    全局:/etc/bashrc

    个人:~/.bashrc

    功用:定义命令别名;定义本地变量

   Shell登录:

      交互式登录:

        直接通过终端账号密码登录:

        使用“su -username”或“su –l username”切换的用户;

       

        /etc/peofile à /etc/profile.d/*.sh à~/.bash_profile à~/.bashrc à/etc/bashrc

      非交互式登录:

        su username

        图形界面下打开的终端

        执行脚本

        ~/.bashrc à/etc/bashrc à/etc/profile.d/*.sh

   编辑配置文件定义的新配置的生效方式:

1)重新启动shell进程;

2)使用source或.命令进程;