bash基本特性

特性之引用

  • 引号有三种类型:’, “, `
  • 字符引用
    • ’: 强引用,其内部的变量不会被替换;
    • “:弱引用,其内部的变量会被替换;
    • `:命令引用。命令会被替换成命令的结果被使用
    • 变量引用:${NAME} ,可简写$NAME
# echo ‘$PATH‘ //强引用
$PATH
# echo "$PATH" //弱引用
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# echo `pwd`    // 命令引用
/home/testuser

特性:命令别名

  • 获取当前用户可用的别名的定义:

    # alias

  • 定义别名:

    # alias NAME=’COMMAND’

  • 别名的生命周期:当前shell进程;长期使用需写进配置文件中
  • 撤消别名:

    # unalias NAME

特性之:快捷键

ctrl + ? 撤消前一次输入
ctrl + c 另起一行
ctrl + r 输入单词搜索历史命令
ctrl + u 删除光标前面所有字符相当于VIM里d shift+^
ctrl + k 删除光标后面所有字符相当于VIM里d shift+$

删除
ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dl
ctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dh
ctrl + k 删除光标后面所有字符相当于VIM里d shift+$
ctrl + u 删除光标前面所有字符相当于VIM里d shift+^
ctrl + w 删除光标前一个单词相当于VIM里db
ctrl + y 恢复ctrl+u上次执行时删除的字符
ctrl + ? 撤消前一次输入
alt + r 撤消前一次动作
alt + d 删除光标所在位置的后单词

移动
ctrl + a 将光标移动到命令行开头相当于VIM里shift+^
ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$
ctrl + f 光标向后移动一个字符相当于VIM里l
ctrl + b 光标向前移动一个字符相当于VIM里h
ctrl + 方向键左键 光标移动到前一个单词开头
ctrl + 方向键右键 光标移动到后一个单词结尾
ctrl + x 在上次光标所在字符和当前光标所在字符之间跳转
alt + f 跳到光标所在位置单词尾部

替换
ctrl + t 将光标当前字符与前面一个字符替换
alt + t 交换两个光标当前所处位置单词和光标前一个单词
alt + u 把光标当前位置单词变为大写
alt + l 把光标当前位置单词变为小写
alt + c 把光标当前位置单词头一个字母变为大写
^oldstr^newstr 替换前一次命令中字符串

历史命令编辑
ctrl + p 返回上一次输入命令字符
ctrl + r 输入单词搜索历史命令
alt + p 输入字符查找与字符相接近的历史命令
alt + > 返回上一次执行命令

其它
ctrl + s 锁住终端
ctrl + q 解锁终端
ctrl + l 清屏相当于命令clear
ctrl + c 另起一行
ctrl + i 类似TAB健补全功能
ctrl + o 重复执行命令
alt + 数字键 操作的次数

特性:命令补全和路径补全

Tab Tab :
点击一下Tab剩余未出现路径或命令,没有分歧则补全剩余路径名或命令。
如果有分歧,点击2下Tab按键出现所有可选项,以供选择

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

- 查找机制:

- (1) 查找内部命令;

- (2) 查找外部命令:

1、去$PATH变量所指定的各路径下,自左而右逐个搜索各目录下的文件名;
2、给定的打头的字符串如果能惟一标识某命令程序文件的文件名,则直接补全;
3、不能惟一标识,再击tab可给列表;
4、错误:没有任何命令可被此打头字符串标识;
  • 路径补全:
在给定的起始路径的上级目录下,以对应路径下的打头字符串来逐一匹配上级目标下的每个文件:

惟一标识:tab补全;

不能惟一标识:tab, tab给出列表;

错误路径:没有响应;

特性之:命令行展开:

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

  • ~: 自动替换为用户家目录;
  • ~USERNAME:自动替换为指定用户的家目录;
  • {}:可承载一个以逗号分隔的路径列表,能够将其展开为多个独立路径;
例:命令行展开
/tmp/{a,b,c}  <-相当于-> /tmp/a /tmp/b /tmp/c
/tmp/{a,b}/z  <-相当于-> /tmp/a/z /tmp/b/z
例:特殊命令替换
命令: # cd ~
命令: # pwd
结果:/root
命令: # cd ~testuser
命令:testuser]# pwd
结果:/home/testuser //跳到testuser用户的家目录

特性之:命令的执行状态结果:

命令的正常输出结果:命令的返回值;适用于不需要看到命令执行的过程,只想知道这个命令是否执行成功了。可通过返回值加以判断

通过引用来保存下来或直接调用——”命令引用“

`COMMAND`

$(COMMAND)

# ls -ld `pwd`
  • 命令的执行状态结果:

    • 成功:0
    • 失败:1-255
# echo "Helllo World"
Helllo World
# echo $?
0
# echoa "Hello World"
-bash: echoa: command not found
# echo $?
127

特性之:glob文件名通配

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

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

  • *:匹配任意长度的任意字符;
// 星号附近给定的字母是约束,在满足约束条件后的任何字符都会被匹配到
p*,  pa*, *p, *p*a
  • ?:匹配任意单个字符;
p?, p?a, p?? //一个?号代表着一个任何字符,二个代表着2个
p??: pa, pad, 
  • [ ]:匹配指定集合内的任意单个字符;

    • [a-z], [A-Z]:不区分字符大小写;
    • [a-z0-9]
  • [[:upper:]]:所有大写字母;
  • [[:lower:]]:所有小写字母;
  • [[:digit:]]:所有的数字;
  • [[:alpha:]]:所有字母;
  • [[:alnum:]]:所有字母和数字;
  • [[:space:]]:空白字符;
  • [[:punct:]]:标点符号;
  • [^ ]:匹配指定集合外的任意单个字符;
  • [^[:alpha:]]

测试:

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

ls  -d  /etc/[^[:alpha:]][a-z]*

2、复制/etc目录下,所以n开头,以非数字结尾的文件或目录至/tmp/etc目录下;

mkdir /tmp/etc
cp  -r  /etc/n*[^0-9]  /tmp/etc/

3、显示/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录;

ls  -d  /ur/share/man/man[0-9]

4、复制/etc目录下,所以p,m,r开头的,且以.conf结尾的文件或目录至/tmp/conf.d目录下;

mkdir  /tmp/conf.d/
cp  -r  /etc/[pmr]*.conf   /tmp/conf.d/

特性:命令历史

shell进程会保存其会话中用户曾经执行过的命令;命令通过其“历史文件”来持久保存此前执行过的命令;每个用户都有其自己专用的历史文件;
  • HISTSIZE:shell进程的缓冲区保留的历史命令的条数;
  • HISTFILESIZE:命令历史文件可保存的历史命令的条数;
    • 默认均为1000;
# echo $HISTSIZE
1000
# echo $HISTFILESIZE
1000
HISTFILE:当前用户的命令历史文件;
  • 查看命令历史列表:~/.bash_history
  • 命令用法:# history
    • history -c:清空命令历史;
    • history -d OFFSET:删除指定的条目;
      • # history -d 156
    • -a 将当前缓冲的历史行追加到历史文件中
    • -n 从历史文件中读取所有未被读取的行
    • -r 读取历史文件并将内容追加到历史列表中

调用命令历史列表中的命令以重执行之目的:

  • !#:再一次执行历史列表中的第#条命令;
\# history
   ....
   72  cat test
   73  history
\# !72
cat test
Hello World
  • !!:再一次执行上一条命令;
\# cat test
Hello World
\# !!
cat test
Hello World
  • !STRING:再一次执行命令历史列表中最近一个以指定的STRING开头的命令;
\# !cat
cat test
Hello World
  • 调用上一条命令的最后一个参数:
快捷键:ESC, .

Alt+.

!$:给出的字符组合

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

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

      • ignoredups:忽略重复的命令;重复是指连续且相同的令;
      • ignorespace:以空白字符开头的命令不记入历史;
      • ignoreboth:上述两者同时生效;
  • 修改变量值的方式:
    • NAME=’VALUE’
\# echo $HISTCONTROL
ignoredups
\# HISTCONTROL="ignoreboth"
\# echo $HISTCONTROL
ignoreboth

特性之:变量

变量:内存空间,有名称,名称即为变量名,对应的内存空间中的数据即为变量的值; 变量就是通过一个特点的名称,寻找到内存当中的一段数据。因为内存的数据是可以变更的,所以是变量。

- 点击变量,跳转链接

特性之:I/O重定向和管道

I/O重定向就是输入、输出本来都有设置好了。比如键盘输入,显示器输出。但是根据某些特别的需求,不需要从键盘中输入直接从文件中寻找已经设定的好的当做输入信息。返回的结果也不需要显示到显示器中,而是保存到文件中去。更改数据流本来要流入的地方到新的地方(一般是文件中)这就是I/O(输入输出)重定向

  • 程序的数据流有三个:

    • 输入数据流: <–,标准输入(stdin),键盘;代码为0,使用<或<<
    • 输出数据流:–>,标准输出(stdout), 显示器;代码为1,使用>或>>
    • 错误数据流:–>,错误输出(stderr),显示器;代码为2,使用2>或2>>
  • fd:file descriptor,文件描述符;描述符是简约标记数据流是哪个
    • stdin: 0 :键盘
    • stdout: 1 :显示器
    • stderr: 2 :显示器

IO重定向:

输入重定向

<:输入重定向

<<:此处创建文件,常用于在脚本中创建文件或生成菜单

<< EOF EOF 此处生成文件

输出重定向:

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

    • COMMAND > /PATH/TO/SOMEFILE
  • 追加重定向:追加新产生的内容至目标文件尾部;
    • COMMAND >> /PATH/TO/SOMEFILE

shell的一个功能开关:

  • 禁止覆盖输出重定向至已存在的文件;

    • # set -C

      >|:在-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

同时重定标准输出和错误输出:
    命令 > /path/to/outfile 2>/path/to/errfile
    命令 &> /path/to/somefile
    命令 > /path/to/somefile 2>&1

特殊输出目标:/dev/null

  • 位桶:bit bucket 。无底洞导入到这里的文件都无法恢复

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

  • 输入重定向:

    • COMMAND < /PATH/FROM/SOMEFILE

管道命令

管道用|表示,每一个管道后面第一个数据必定是命令,命令必须是能接收标准输入的数据才行。这样的命令才是管道命令
管道命令仅仅会处理标准输出,对于标准错误输出予以忽略
管道命令必须要能够接收来自前一个命令的数据成为标准输入继续处理才行

可以成为管道命令的:

选取命令:cut(从已有的信息里切出一段信息,信息已行为单位),grep(以行为单位,搜索出需要的信息,类似文本搜索)

排序命令:sort(排序文件),uniq(配合排序的文件删选重复的信息,wc(统计数据信息),

双向重定向:tee(即分流定向即向显示器输出信息,同时向文件输出信息保存)

字符转换命令:

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

col

join

paste

expand

文件切割命令:Split(按照指定大小或行数切割成小文件)

时间: 2024-11-17 09:19:29

bash基本特性的相关文章

Linux之bash shell特性

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

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的使用和管理过程中,将会用到大量的命令,我们可以通过命令别名来避免一些常用

权限管理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.