Bash特性
进程:在每个进程看来,当前主机上只存在内核和当前进程;
进程是程序的副本,进程是程序执行的实例
bash特性:
1、命令历史,命令补全;
2、支持管道、重定向;
3、支持命令别名alias;
4、支持命令行编辑;
5、支持命令行展开;
6、支持文件名通配;
7、支持使用变量;
8、支持编程;
。。。
命令行编辑:
光标跳转:
ctrl+A:跳到行首;
Ctrl+E:跳至行尾;
Ctrl+k:删除光标至命令行尾的内容;
Ctrl+u:删除光标至行首的内容
Ctrl+l:清屏;
命令历史:
history:查看命令历史
-c:清空命令整个历史
-d OFFSET [n]:删除指定位置的命令 history -d 2010 10(表示删除2010后位置10个历史命令)
-w:保存命令历史至历史文件中
命令历史相应保存在家目录的.bash_history或.zsh_history隐藏文件中
环境变量
PATH:命令搜索路径
HISTSIZE:命令历史缓存区大小
命令历史的使用技巧:
!n:执行命令历史中的第n条命令
!-n:执行命令历史中倒数第n条命令
!!:执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
ESC, .(按ESC后松开再按.号):引用前一个命令的最后一个参数;
ALT+.:引用前一个命令的最后一个参数;
TAB:命令补全/路径补全
路径补全:tab键
命令别名:
alias CMD=’COMMAND [OPTION] [ARGUMENT]’ (有空格需要用单引号括起来)
在shell中定义的别名仅在shell的生命周期中有效:别名有效范围为当前shell进程;要做到永久有效时需要写到配置文件中;
unalias CMD:撤销命令别名
命令替换:
把命令中某个子命令替换为其执行结果的过程;
$(COMMAND) 或COMMAND
(注意是反引号): 对命令进行替换
touch ./ $(date +%F-%H-%M-%S).txt
bash支持的引号:
“(反引号):命令替换
“ “(双引号):弱引用,可以实现变量替换
‘ ’(单引号):强引用,不完成变量替换
文件名通配, globbing(其实是命令展开,相当于文件名展开)
*:可以用于实现任意长度任意字符
?:匹配任意单个字符 ls ?e
[ ]:匹配指定范围内的任意单个字符 [abc], [a-m]表示a-m中任何一个, [a-zA-Z]
[^]:取反,非范围内
ls [a-zA-Z]*[0-9]:以字符开头,以数字结尾的任意文件
[:space:]:所以的空格(使用时还需在外面在加一个中括号)
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]:大写字母
[:alpha:]:大小写字母
[:digit:]:数字
[:alnum:]:数字和大小写字母
加个^表示取反,如[^[:alpha:]]表示非字母
ls [[:alpha:]]*[[:digit:]]
通配符有些问题并不能精确描述,导致不能匹配,此时需要用正则表达式;
man 7 glob 可查看以上文件名通配的说明;
基础知识
bash变量的类型:
本地变量(局部变量)
环境变量(当前shell进程及其子进程)
位置变量:$1,$2,....
shift:轮换,轮替,前一个位置变量shift后可重复适用,shift(shift1)命令每执行一次,变量的个数($#)
减一(之前的$1
变量被销毁,之后的$2就变成了$
1),而变量值提前一位。同理,shift n后,前n位参数都会被销毁。
特殊变量 :
?:上一条命令的退出状态码程序执行,可能有两类返回