Bash特性之一:命令行展开
~ :展开为对应用户的家目录。比如 cd ~UserName
{,,,,,} : 他能在命令行展开的时候展开为多个路径。
创建 x/y x/z x/z/1 x/z/2
则用:mkdir -pv x/{y,z/{1,2}}
Bash特性之二:shell引用
Shell中的引用.
' ':强引用,变量替换不会进行
" ":弱引用,能够执行变量替换
` `:命令替换,引用命令的执行结果;命令替换的另外一符号:$(命令);
变量替换:${变量名},只要能够替换就能操作
Bash特性之三:命令历史
命令历史
bash保存的过去曾经执行过的命令的列表;
当前shell进程的保存在缓冲区中;
缓冲区中的命令会在shell退出时保存至文件中, .bash_history
使用上下箭头键可以翻看此前曾经执行过的命令;
#history 快捷方式
#!#-> #为命令历史列表中的命令编号;可执行第#条命令;
#!!->执行上一条命令
#!-#-> 执行历史命令列表中的倒数第#条命令;
#!$->引用上个历史命令的最后一个参数;ESC->.
#!string->执行命令历史列表中最近一次以string开头的命令;
#history–c –>清空命令历史
#history–d #->清除指定的历史命令条目
#history–a ->追加当前会话的命令历史到历史文件中
#historyn ->数字,要列出最近的n条命令列表
#history–w ->将目前的history记忆内容写入HISTFILES
#history-r ->将HISTFILES的内容读到目前这个shell的history中
命令历史相关的环境变量:
HISTSIZE:命令历史中可以保存的命令的个数;
HISTFILE: 命令历史文件;
HISTFILESIZE:命令历史文件可以保存的命令的个数;
HISTCONTROL: 控制命令历史的生成;
ignoredups: 忽略记录重复的命令;连续的相同命令才为重复;
ignorespace: 不记录以空白字符开头的命令;
ignoreboth: 同时具有上面两种特性;
使用方法:
export HISTCONTROL=参数
撤销HISTCONTROL的控制:#unset HISTCONTROL
Bash特性之四:别名机制
#alias 不带任何选项显示当前系统定义的别名条目
#\ls 不使用别名机制,命令本身
如何定义别名:
#alias 别名='原始命令'(如果原始命令没有空格可不加引号)
例如:#alias cdnet='cd /etc/sysconfig/network-scripts'
#unalias 别名 ->撤销自定义的别名
如需要使其永久生效可写入局部配置文件中:~/.bashrc(每个用户可自定义)
Bash特性之五:Globbing,文件名通配
* :匹配任意长度的任意字符
?: 匹配任意单个字符
[ ]:匹配指定字符范围内的任意单个字符
[a-z] --->不区分大小写 --->[[:lower:]] 所有小写字母
[A-Z] --->不区分大小写 --->[[:upper:]] 所有大写字母
[0-9] [[:digit:]] 所有数字
[a-z0-9A-Z] [[:alnum:]] 所有字母和数字
[[:alpha:]] 所有大小写字符
[[:space:]] 空白字符
[[:punct:]] 特殊符号、标点符号
[^]:匹配指定字符范围外的任意单个字符;
如:非数字:[^0-9]
Bash特性之六:Bash 在命令行快捷键
Ctrl+a: 跳至命令行首
Ctrl+e: 跳至命令行尾
Ctrl+u: 删除命令行首至当前光标所在处的内容
Ctrl+k: 删除当前光标所有处至命令行尾的内容
Ctrl+l: 清屏,相当于clear命令
Ctrl+c: 取消或终止;
Ctrl+z: 将当前命令送至后台
Bash特性之七:Bash补全
命令补全:
shell命令:内容,外部
外部:在系统某路径下有一个可执行程
PATH,是一组由:分割的路径
使用Tab键执行补全
路径补全:在给出的打头的路径补全;如果没有打头的路径,则为当前;
Bash特性之八:提供编程环境
程序=指令+数据
变量:
弱类型语言:
1、不强制区分变量的类型,无论存储何种数据,均以字符格式进行;
2、无须事先声明;用到时,直接使用,直接赋值;
bash: 动态编程语言,是弱类型语言;
Bash特性之九:Bash中的变量
变量的类型:
1.本地变量:只对当前shell进程有效,对其子shell以及其它shell都无效;
定义变量:[set]Var_Name="Value"
引用变量:${Var_Name}
撤销变量:unset Var_Name
不带任何参数的"set"命令 将会显示当前系统中的变量
2.局部变量:仅对局部代码生效
local Var_Name="Value"
3.环境变量:对当前shell进程及其子shell有效;
export Var_Name="Value"
Var_Name="Value"
export Var_Name
导出
4.位置变量:在脚本中直接应用
$1......
5.特殊变量:
$0: (脚本名自身)
$# (传递到脚本的参数列表)
$* (以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个)
$$ (脚本运行的当前进程ID号)
$! (后台运行的最后一个进程的ID号)
$@ (使用时加引号,并在引号中返回每个参数)
$- (显示shell使用的当前选项,与set命令功能相同)
$? (显示命令的最后退出状态,0表示没有错误,其它任何值都表明有错误)
变量的命名要求:
变量在赋值时不能使用$;
变量名只能包含字母、数字和下划线,而且不能以数字开头;
变量名区别大小写;
环境变量:用来bash的工作特性,用于保存当前会话的属性信息;
#env,export,printenv
显示当前系统所有环境变量
Bash特性之十:输入输出重定向
I/O:设备的寄存器
文件描述符:file descript,FD
INPUT:标准输入(standardinput->stdin),文件描述符0
OUTPUT:标准输出(standardoutput-stdout),文件描述符1
显示器容纳两个数据流:
标准错误输出的错误流:stderr,文件描述符2
I/O重定向:
1.<->输入重定向符号
<< EOF
->此处创建文件Here Docunment(常用于在脚本中创建文件或生成菜单)
2.>->覆盖输出重定向符号
>>->追加输出重定向符号
例如:ls /var>/tmp/var.out
ls/etc >> /tmp/var.out ->追加
#set-C ->禁止使用覆盖重定向至已存在的文件
#set+C ->关闭上述特性
>|->强制输出,在-C特性下,强制使用覆盖重定向
/dev/null:bitbucket,位桶,数据黑洞
例如只想知道ls命令是否成功,而不需要显示结果
则:ls /etc> /dev/null | echo $?
2>->错误覆盖重定向
2>>->错误追加重定向
例如:lss /etc2> /tmp/etc.err
同时重定向标准输出和错误输出:
COMMNAD> /path/to/outfile 2> /path/to/errfile
无论成功与否,结果都保存在同一个文件中
COMAMAD&> /path/to/somefile
将错误和标准输出定向到同一个文件:
COMMAND> /path/to/somefile 2>&1