CentOS系统Shell编程语言基础之Bash的基础特性简介

bash的基础特性之命令历史:

命令历史:shell进程会在其会话中保存此前用户提交执行过的命令
~]#history
定制history的功能,可通过环境变量实现
HISTSIZE:shell进程可保留的命令历史的条数
HISTFILE:持久保存命令历史的文件, “.bash_history”
HISTFILESIZE:命令历史文件的大小

命令用法:

history [-c] [-d offset] [n]
or history -anrw [filename]
or history -ps arg [arg...]

命令常用选项:

-c:清空命令历史
-d offset:删除指定命令历史
-r:从文件读取命令历史至历史列表中
-w:把历史列表中的命令追加至历史文件中

history +数字:显示最近的“数字”条命令

调用命令历史列表中的命令:

!+数字:再一次执行历史列表中的第“数字”条命令
!!:再一次执行上一条命令
!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令

注意:命令的重复执行有时候需要依赖于幂等性

调用上一条命令的最后一个参数:
快捷键:ESC ,.
字符串:!$

控制命令历史记录的方式:
环境变量:HISTCONTROL
ignoredups:忽略重复的命令
ignorespace:忽略以空白字符开头的命令
ignoreboth:以上两者同时生效

修改变量的值: NAME=‘VALUE‘,此修改只对当前shell有效

bash的基础特性之命令补全:

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

命令查找机制:
查找内部命令
根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名

给定的打头字符串如果能唯一标识某命令程序文件,则直接补全;
给定的打头字符串如果不能唯一标识某命令程序文件,再击tab键一次,会给出列表

路径补全:
在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件

tab:如果能唯一标识某命令程序文件,则直接补全;如果不能唯一标识某命令程序文件,再击tab键一次,会给出列表

bash的基础特性之命令行展开:

~:自动展开为用户的家目录,或指定用户的家目录
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
例如:/tmp/{a,b}相当于/tmp/a /tmp/b

bash的基础特性之命令的执行状态结果

命令执行的状态结果:
bash通过状态返回值来输出此结果
成功:0
失败:1-255
命令执行完成之后,其状态返回值保存于bash的特殊变量”$?”中, ~]#echo $?

命令正常执行时,有的还会有命令返回值,根据命令及其功能不同,结果各不相同

引用命令的执行结果:
$(COMMAND) 或COMMAND

bash的基础特性之引用:

强引用:‘’
弱引用:“”
命令引用:``(~位置)

bash的基础特性之快捷键:

Ctrl+a:跳转至命令行行首
Ctrl+e:跳转至命令行行尾
Ctrl+u:删除行首至光标所在处之间的所有字符
Ctrl+k:删除光标所在处至行尾的所有字符
Ctrl+l:清屏,相当于clear命令

bash的基础特性之globbing(文件名通配机制):

globbing:文件名通配机制(整体文件名匹配,而非部分)

匹配模式:元字符
:匹配任意长度的任意字符
pa
:以pa开头的所有文件
pa:文件名包含pa的文件
*pa:以pa结尾的文件

?:匹配任意单个字符
pa?:匹配以pa开始的下一个为p或a中任意一个的文件

[]:匹配指定范围内的任意单个字符
有几种特殊格式:
[a-z],[A-Z],[0-9],[a-z,0-9]

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

pa[0-9][0-9], ?2[0-9]0-9

练习1:显示/var目录下所有以l,以小写字母结尾,且中间出现一位任意字符的文件或目录
ls -d /var/l?[;lower;]
练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9][^0-9]
练习3:显示/etc目录下,以非字母开头,后面跟一个字母及其任意长度任意字符的文件或目录
ls -d /etc/[^a-z][a-z]

练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录
cp -r /etc/m[^0-9] /tmp/magedu.com
练习5:复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man目录下
cp -r /usr/share/man/man[0-9] /tmp/man
练习6:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d目录下
cp -r /etc/[mnrp]
.conf /tmp/conf.d

bash特性之命令hash:

缓存此前命令的查找结果:key-value
key:搜索键,value:值
?
hash命令
? ?hash:列出
? ?hash -d command :删除
? ?hash- r :清空
bash的特性之变量:

程序:指令+数据
指令:由程序文件提供
数据:IO设备、文件、管道、变量
?
程序:算法+数据结构
?
变量名+指向的内存空间
?
变量赋值:name=value
变量类型:存储格式、表示数据范围、参与的运算
? ? 编程语言:
? ? ? ? ? ? 强类型变量
? ? ? ? ? ? 弱类型变量:
? ? ? ? ? ? ? ? ? ?bash把所有变量统统视作字符型
? ? ? ? ? ? ? ? ? ?bash中的变量无需事先声明,相当于把声明和赋值过程同时实现
? ? ? ? ? ? ? ? ? ? ? ? ? 声明:声明其类型,定义出其变量名称
?
? ? ? ? ? ? 变量替换:把变量名出现的位置替换为其所指向的内存空间中数据
? ? ? ? ? ? 变量引用:${var_name},$var_name
? ? ? ? ? ? 变量名:变量名只能包含数字、字母和下划线,而且不能以数字开头
? ? ? ? ? ? 变量名:见名知义,命名机制遵循某种法则;不能够使用程序的保留字,例如if,else,then,while等
?
? ? ? ? bash变量类型:
? ? ? ? ? ? ?本地变量:作用域仅为当前shell进程
? ? ? ? ? ? ?环境变量:作用域为当前shell进程及其子进程
? ? ? ? ? ? ?局部变量:作用域仅为某代码片段(函数上下文)
? ? ? ? ? ? ?位置参数变量:向执行脚本的shell进程传递的参数
? ? ? ? ? ? ?特殊变量:shell内置的有特殊功用的变量
? ? ? ? ? ? ? ? ? ? ? $?:用于执行上一个命令的执行状态结果
?
? ? ? ? ? ? ? ? 本地变量:
? ? ? ? ? ? ? ? ? ? 变量赋值:name=value
? ? ? ? ? ? ? ? ? ? 变量引用:${var_name},$var_name
? ? ? ? ? ? ? ? ? ? ? ? ?“”:变量名会替换为其值
? ? ? ? ? ? ? ? ? ? ? ? ?‘’:变量名不会替换为其值
? ? ? ? ? ? ? ? ? ? 查看变量:set
? ? ? ? ? ? ? ? ? ? 撤销变量:unset name
? ? ? ? ? ? ? ? ? ? ? ? ? ? 注意:此处非变量引用
?
? ? ? ? ? ? ? 环境变量:
? ? ? ? ? ? ? ? ? 变量赋值:
? ? ? ? ? ? ? ? ? ? ? (1)export name=value
? ? ? ? ? ? ? ? ? ? ? (2)name=value
? ? ? ? ? ? ? ? ? ? ? ? ? ?exportname
? ? ? ? ? ? ? ? ? ? ?(3)declare -x name=value
? ? ? ? ? ? ? ? ? ? ?(4)name=value
? ? ? ? ? ? ? ? ? ? ? ? ? declare -x name
? ? ? ? ? ? ? ? ? ? ?变量引用:${name},$name
?
? ? ? ? ? ? ? 注意:bash内嵌了许多环境变量(通常为全大写字符),用于定于bash的工作环境 (PATH,HISTFILE,HISTSIZE,HISTFILESIZE,UID)
?
? ? ? ? ? ? ? ? ?查看环境变量:export,declare -x,printenv,env
? ? ? ? ? ? ? ? ?撤销变量:unset name
?
? ? ? ? ? 只读变量:
? ? ? ? ? ?(1)declare -r name
? ? ? ? ? ?(2)readonly name
?
? ? ? ? ? ? ? ? 注意:只读变量无法重新赋值,并且不支持撤销,存货时间为当前shell进程的生命周期,随shell进程终止而终止
?
?
bash特性之多命令执行:

~]#COMMAND1;COMMAND2;COMMAND3;...
?
逻辑运算:
? ? ? 运算数:真(true,yes,on,1)
? ? ? ? ? ? ? ? ? ? ? 假(false,no,off,0)
?
? ? ? ? ? ?与:
? ? ? ? ? ? ? ?1 && 1 = 1
? ? ? ? ? ? ? ?1 && 0 = 0
? ? ? ? ? ? ? ?0 && 1 = 0
? ? ? ? ? ? ? ?0 && 0 = 0
? ? ? ? ?或:
? ? ? ? ? ? ? 1 || 0 =1
? ? ? ? ? ? ? 1 || 1 =1
? ? ? ? ? ? ? 0 || 1 =1
? ? ? ? ? ? ? 0 || 0 =0
? ? ? ? ?非:
? ? ? ? ? ? ? ! 1 = 0
? ? ? ? ? ? ? ! 0 = 1
?
? ?短路法则:
? ? ? ? ?~]#COMMAND1 && COMMAND2
? ? ? ? ? ? ? ? COMMAND1为“假”,则COMMAND2不会再执行
? ? ? ? ? ? ? ? 否则,COMMAND1为“真”,则COMMAND2必须执行
?
? ? ? ? ? ? 例:[[email protected] ~]# touch /tmp/test.etc && ls /etc > /tmp/test.etc
? ? ? ? ? ? ? ? ?[[email protected] ~]# cat /tmp/test.etc
?
? ? ? ? ?~]#COMMAND1 || COMMAND2
? ? ? ? ? ? ? ? COMMAND1为“真”,则COMMAND2不会再执行
? ? ? ? ? ? ? ? 否则,COMMAND1为“假”,则COMMAND2必须执行
?
? ? ? ? ? ? ?例:[[email protected] ~]# id user1 || useradd user1
? ? ? ? ? ? ? ? ?id: user1:无此用户
? ? ? ? ? ? ? ? ?[[email protected]alhost ~]# id user1
? ? ? ? ? ? ? ? ? uid=2003(user1) gid=2003(user1) 组=2003(user1)

原文地址:http://blog.51cto.com/12068974/2140515

时间: 2024-10-23 17:18:15

CentOS系统Shell编程语言基础之Bash的基础特性简介的相关文章

Lunix基础入门--bash的基础特性(五)

Bash的基础特性之一(history命令): 命令历史:shell进程会其会话中保存此前用户提交执行过的命令: [[email protected] ~]# history 定制history的功能,可通过环境变量实现: HISTSIZE:shell进程可保留的命令历史条数 [[email protected] ~]# echo $HISTSIZE 1000 HISTFILE:历史命令保存的文件 [[email protected] ~]# echo $HISTFILE /root/.bash

查看CentOS系统shell脚本语言支持的种类

1,使用cat /etc/shells 可以看到当前系统支持的shell脚本语言支持的种类 备注:Linux系统中的主流Shell是bash,bash是由Bourne Shell(sh)发展而来的,同时bash还包含了csh和ksh的特色,但大多数脚本都可以不加修改地在sh上运行,如果使用了sh后发现结果和预期有差异,那么可以尝试用bash替代sh. 2,查看当前系统默认使用的shell命令如下或者查看系统的用户信息文件也可以看到 原文地址:http://blog.51cto.com/13718

在centos系统shell脚本中cat和重定向符号<<EOF结合使用的注意事项

在运维人员编写shell脚本中,有时会需要将一些内容直接放在到一个文件,比如在一个shell脚本中配置一些内容再生成一个shell脚本,此时可以使用到cat命令和重定向符号"<<"以及EOF的使用.但是,在shell脚本中使用重定向符号生成shell脚本时,会遇到一些问题,比如,内容中含有特殊符号"#","`","$"时,(如果以"#"开头,则需要加转义符"\")重定向会忽略

Linux基础之bash shell介绍及基本特性

今天继续讲Linux基础知识,内容是关于bash shell的.分享以下bash shell的相关知识,例如基本特性等.  1.8)bash shell的介绍 1.8.1)什么是bash shell 概括地讲就是bash shell是一个命令解释器,与内核进行交互. bash shell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕. 当我们使用远程连接工具连接linux服务,系统则会打开一个默认的sh

Linux CentOS 7 Shell基础(命令历史,管道,作业控制,变量及环境变量)

一. shell介绍 shell是一个命令解释器,提供用户和机器的交互. 支持特定语法,比如逻辑判断,循环. 每个用户都有特定的shell centos7默认shell 为bash(Bourne Agin Shell) 还用zsh,csh,ksh等 二. 命令历史history history 命令历史 history -c 清空内存缓存命令. ~/.bash_history 命令历史的存储文件 HISTSIZE=1000 默认命令历史记录1000条 /etc/profile-----HISTO

Linux学习笔记(16)shell基础之Bash变量

1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接值,且等号两侧不能有空格: ④ 变量的值如果有空格,需使用单引号或双引号括起: ⑤ 变量的值中,可使用"\"转义符: ⑥ 如果需要增加变量的值,可以进行变量值的叠加,不过变量需要用双引号包含,即"$变量名",或者用${变量名}包含: ⑦ 如果是把命令的结果作为变量值赋予

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

centos系统与ubuntu系统的区别

centos和ubuntu简述 CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用.Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词(译为吾帮托或

Linux目录结构、bash的基础特性、I/O重定向及管道

Linux目录结构 LSB(Linux StandardsBase)是一套核心标准,它保证了LINUX发行版同LINUX应用程序之间的良好结合规定了一系列标准,其中包括文件系统层级结构标准(FHS Filesystem Hierarchy Standard) Linux系统根目录下有众多子目录,这些目录都参照了FHS协定 / ├── bin ├── boot ├── dev ├── etc ├── home ├── lib ├── lib64 ├── lost+found ├── media ├