bash的特性(一)

一.Shell

说到bash,首先就必须先提一下shell。Shell是什么呢?Shell是一个C语言编写的给用户提供交互的接口程序。用户的大部分操作都是通过shell完成的。

广义上Shell主要分为两类:

1.GUI图形用户界面:主要有KDE、GNOME、XFCE等

2.CLI命令行界面:bash、zsh、fish、sh、csh、tcsh等。各个发行版主要使用bash。

二.bash的特性

(一)命令别名

在linux的使用和管理过程中,将会用到大量的命令,我们可以通过命令别名来避免一些常用的长命令的频繁且繁琐的输入。

我们可以通过alias命令来获取当前用户可用的别名以及设置新的别名。

获取当前用户别名

alias  NAME=‘COMMAND‘

定义别名

alias  NAME=‘COMMAND‘

需要注意的是,定义别名的生命周期仅为当前shell进程。

撤销别名

ualias  NAME

(二)命令历史

Shell进程会保存其会话中shell进程会保存其会话中用户曾经执行过的命令;命令通过其“历史文件”来持久保存此前执行过的命令;每个用户都有其自己专用的历史文件;

HISTSIZE:shell进程的缓冲区保留的历史命令的条数;

HISTFILESIZE:命令历史文件可保存的历史命令的条数;

我们可以通过echo $NAME 来查看,默认HISTSIZE以及HISTFILESIZE大小均为1000

HISTFILE 为当前用户命令历史文件

使用history命令查看命令历史列表

history命令的使用方法

history -c:清空命令历史

history -d:删除指定条目

例:history -d 10,与上图对比可见,原来的第10条命令已经被删除了。

history -a:将当前缓冲的历史行追加到历史文件(HISTFILE)中。

history -n:从历史文件中读取所有未被读取的行。

history -r:读取历史文件并将历史文件追加到历史列表中。

调用上一条命令的最后一个参数:快捷键:ESC, .或Alt+.

显示最近的n条件命令历史:history  #

控制命令历史的记录方式主要通过HISTCONTROL环境变量进行,其取值:

ignoredups:忽略重复的命令;重复是指连续且相同的令;

ignorespace:以空白字符开头的命令不记入历史;

ignoreboth:上述两者同时生效;

查看变量值的方式,echo $HISTCONTROL修改变量值的方式:HISTCONTROL="VALUE"

(三)快捷键

Ctrl+a:跳至命令行首;

Ctrl+e:跳至命令行尾;

Ctrl+k:删除光标所在处至尾部的内容;

Ctrl+u:删除行首至光标所在处的内容;

(四)命令补全和路径补全

命令补全:shell程序在接收到用户执行命令的请求且分析完成之后,最左侧字符串将被当作命令去查找。

查找机制:

首先会查找内部命令,如果能唯一标识某命令程序文件的文件名,则直接补全,如果不能则 查找外部命令。去$PATH变量所指定的各路径下,自左而右逐个搜索各目录下的文件名;给定的打头的字符串如果能惟一标识某命令程序文件的文件名,则直接补全;不能惟一标识,再次点击tab可给出命令列表;

错误:没有任何命令可被此打头字符串标识;

路径补全:在给定的起始路径的上级目录下,以对应路径下的打头字符串来逐一匹配上级目标下的每个文件:如果能惟一标识:tab补全;不能惟一标识则再次点击tab给出列表;

错误路径:没有响应;

(五)命令行展开

把命令行的给定的特殊符号自动替换为相应字符串的机制;

~: 自动替换为用户家目录;

~USERNAME:自动替换为指定用户的家目录;

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

例如:/tmp/{a,b,c} =/tmp/a  /tmp/b   /tmp/c

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

(六)命令的执行状态结果

当一个命令执行之后会有命令的正常输出结果:命令的返回值

通过引用来保存下来或直接调用——`COMMAND`或$(COMMAND)

命令的执行状态结果:

成功:0

失败:1-255

bash用一个特殊变量来保存最一次执行的命令的状态结果:$?

注意:这个特殊变量能且只能显示上一次命令的执行状态。

(七)glob

glob:文件名通配机制;快速引用多个文件;文件名整体匹配度检测;

元字符:基于元字符可编写匹配模式(pattern);

*:匹配任意长度的任意字符;

?:匹配任意单个字符;

[ ]:匹配指定集合内的任意单个字符:

[a-z], [A-Z]:不区分字符大小写;[0-9][a-z0-9]

[[:upper:]]:所有大写字母;

[[:lower:]]:所有小写字母;

[[:digit:]]:所有的数字;

[[:alpha:]]:所有字母;

[[:alnum:]]:所有字母和数字;

[[:space:]]:空白字符;

[[:punct:]]:标点符号;

[^ ]:匹配指定集合外的任意单个字符;

例:[^[:alpha:]]

(八)变量

变量:内存空间,有名称,名称即为变量名,对应的内存空间中的数据即为变量的值;

变量为什么有类型?

存储空间、存储格式、参与的运算…类型不同决定对数据的处理方式不同

变量命名格式:只能使用字母、数字和下划线;而且不能以数字开头;变量名需做到见名知义;不能使用程序保留字,例如if、case、then、fi、esac、for、while、until、break、continue等;

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

变量替换:把变量引用符号出现的位置替换为其指向的内存空间中的数据;

bash变量种类:

本地变量:作用域为当前shell进程;不包括其子进程;

变量赋值:NAME=VALUE

变量引用:$NAME, ${NAME}""

查看变量:set

撤销变量:unset NAME

注意:此处非为变量引用,因此不能使用$;

所有的本地变量在shell进程终止时,会被自动撤销;

环境变量:使用域为当前shell进程及其子进程;

变量声明和赋值:declare -x  NAME[=VALUE]

export  NAME[=VALUE]

引用方式:${NAME}, $NAME

注意:bash内嵌了许多环境变量,名称为全大写字母,例如UID、HOME、PWD、SHELL, PATH, HISTSIZE等等;

环境变量查看:export, declare  -x,env,  printenv

撤销环境变量:unset  NAME

只读变量:常量

(1) declare  -r  NAME

(2) readonly  NAME

局部变量

位置参数变量

特殊变量

(九)I/O重定向和管道

程序的数据流有三个:

输入数据流: <--,标准输入(stdin),键盘;

输出数据流:-->,标准输出(stdout), 显示器;

错误数据流:-->,错误输出(stderr),显示器;

fd:file descriptor,文件描述符;

stdin: 0

stdout: 1

stderr: 2

IO重定向:

输出重定向:重定向程序正常执行的结果

覆盖重定向:覆盖目标文件中的原有内容;

COMMAND >  /PATH/TO/SOMEFILE

追加重定向:追加新产生的内容至目标文件尾部;

COMMAND >> /PATH/TO/SOMEFILE

shell的一个功能开关:

set -C:禁止覆盖输出重定向至已存在的文件;

注意:此时仍然可以使用“>|”至目标文件;

set +C关闭上述特性;

错误重定向:

重定向错误的执行结果;

错误输出覆盖重定向;

COMMAND 2>  /PATH/TO/SOMEFILE

错误输出追加重定向;

COMMAND 2>> /PATH/TO/SOMEFILE

合并标准输出与错误输出流:

(1) &>, &>>

(2) COMMAND > /PATH/TO/SOMEFILE 2>&1

COMMAND >> /PATH/TO/SOMEFILE 2>&1

特殊输出目标:/dev/null

位桶:bit bucket

特殊的输入文件:/dev/zero

输入重定向:

COMMAND < /PATH/FROM/SOMEFILE

tr命令:

1.把输出的数据当中的字符,实现对位转换,即把数据中的存在于字符集中的字符,统统转换为字符集2中对应的字符;

tr  SET1  SET2 < /PATH/FROM/SOMEFILE

2.删除

tr  -d  SET1  < /PATH/FROM/SOMEFILE

COMMAND << :Here Document

用法:

COMMAND << EOF

COMMAND > /PATH/TO/SOMEFILE << EOF

管道:

COMMAND1 | COMMAND2 | COMMAND3 | ...

将COMMAND1的结果作为COMMAND2的输入,将COMMAND2的结果作为COMMAND3的输入

tee命令:

tee - read from standard input and write to standard output and files

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

-a:使用追加输出,而非覆盖;

COMMAND | tee /PATH/TO/SOMEFILE

时间: 2024-08-02 11:03:57

bash的特性(一)的相关文章

Linux之bash shell特性

一.shell是什么? Shell 本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 如图shell是一个应用程序,是用户管理应用程序的一个接口. 二.广义上shell的分类 GUI:图形用户界面 KDE,GNOME,XFCE CLI:

权限管理2 以及bash的特性 快捷键,补全功能以及变量的类型,登录类型,脚本

权限管理: owner          group         other 属主              属组            其它 权限:read   write     execute r           w            x 文件: -r:可以使用文件查看类的命令来显示相关内容 -w:可以使用编辑器修改内容 -x:可以将其发起一个进程 目录: -r:可以使用ls命令查看目录内容的的文件信息 -w:可以创建 删除文件 -x:可以使用ls -l命令查看内容的文件信息,

linux学习之路之bash及其特性

我们知道当我们用鼠标点击,或输入一个命令,系统就玩帮我们完成一个任务,那么当我们点击一个链接时,系统由是如何知道要去完成相应的操作呢?这是因为通过shell来完成的. 那么什么是shell呢? shell就是用户和操作系统之间的一个接口,通过这个接口shell接受来自用户的命令,并调用相应的应用程序来呼叫kernel来处理相应的工作. 在linux系统上面存放着多种类型的shell,这些shell存放在/etc/shells文件里,默认RedHat使用的shell为bash 下面介绍一些bash

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

条件测试 判断某需求是否满足,需要由测试机制来实现. 根据命令的执行状态结果,表达不同的测试条件 1.根据id命令的执行状态结果,判断用户是否存在 [[email protected] ~]# id root uid=0(root) gid=0(root) groups=0(root) [[email protected] ~]# echo $? 0 [[email protected] ~]# id help id: help: no such user [[email protected] 

bash的特性总结

什么是bash:       shell作为用户与计算机内核交互的接口,是用户与计算机沟通的桥梁,而bash(borne again shell)是众多shell里面最为流行一种,bash作为众多shell里面的一种有着众多的特性,掌握bash的众多特性将会是我们今后学习linux必经之路.       首先介绍一下bash的特性之一       命令历史:这个特性是将用户之前执行过的命令保存到缓存当中,通过上下键以及history命令的特殊选项来方便用过顺利完成操作系统功能.键入不带任何选项的

Linux之bash的特性

bash的特性(1)常用组合快捷键:,ctrl+d Ctrl+a: 跳转至命令行首 Ctrl+e: 跳转至命令行尾 Ctrl+u: 删除命令行首至当前光标所在处之前的所有内容 Ctrl+k: 删除当前光标所在处至命令行尾的所有内容 Ctrl+l: 清屏 Ctrl+c: 中止或取消 Ctrl+z: 把当命令送至后台 Ctrl+d:回到登陆用户登陆界面 (2)命令补全:命令的补齐,参数中目录或文件的补齐 当输入命令的部分是唯一的时候按TAB键就可以不全剩下的部分 当输入命令的部分不是唯一的,按两次T

5、自学——Linux的学习进度与任务【shell中bash的特性】

shell中bash的特性 shell中bash的特性 bash特性之一:命令行展开   把命令行的给定的一个特殊符号自动替换为别的字符串的机制 目录: 命令:cd [内置命令] 工作目录:当前所处的目录 cd:change directory(切换目录) cd 目标路径(不能是一个文件必须是一个目录) 所有从根起始的都是绝对路径:/文件名 基名:路径最后一个文件的名字  /x/y/z/m/n: 目标路径  /x/y/z/m: 是目录名或者路径名   两个命令: 获取路径的基名:   # bas

bash的特性

bash的特性 Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell.事实上,还有许多传统UNIX上用的Shell,例如tcsh.csh.ash.bsh.ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用 bash是大多数Linux系统以及Mac OS X默认的shell,它能运行于大多数类Unix风格的操作系统之上,甚至

bash及其特性笔记

bash及其特性 shell: 外壳 GUI: Gnome,KDE,Xfce CLI: sh, csh, ksb, bash, tcsh, ksh, zch 程序: 进程 允许同一个用户登陆多次,互不相干,进程独立 进程: 在每个进程看来,当前主机上只存在内核和当前进程 进程是程序的副本,进程是程序执行的实例 用户工作环境: # $ shell, 子shell bash: 1. 命令历史 2. 管道.重定向 3. 命令别名 4. 命令行编辑 5. 命令行展开 6. 文件名通配 7. 变量 8.