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