首页 > 代码库 > 5、自学——Linux的学习进度与任务【shell中bash的特性】
5、自学——Linux的学习进度与任务【shell中bash的特性】
shell中bash的特性
shell中bash的特性
bash特性之一:命令行展开
把命令行的给定的一个特殊符号自动替换为别的字符串的机制
目录:
命令:cd 【内置命令】
工作目录:当前所处的目录
cd:change directory(切换目录)
cd 目标路径(不能是一个文件必须是一个目录)
所有从根起始的都是绝对路径:/文件名
基名:路径最后一个文件的名字
/x/y/z/m/n: 目标路径
/x/y/z/m: 是目录名或者路径名
两个命令:
获取路径的基名: # basename
获取路径的目录名:# dirname
注意: 文件名可以使用除/(路径分割符)以外的任意字符(空白符也是可以),但是不要使用特殊字符,且总长度不能超过255个
严格区分大小写
注意:~ 相当于 /home
如果要切换到根目录下的目录具体操作:# cd /USERNAME(可以是空文件或者目录)【只有管理员可以此操作】
如果要切换到家目录具体操作:# cd 或者 # cd ~
如果要切换到家目录下的目录具体操作:# cd ~USERNAME(可以是空文件或者目录)【只有管理员可以此操作】
# cd - :返回上一次所在的目录
# cd . : 切换到当前目录
# cd .. :切换到父目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思)
# cd ../.. :切换上两级目录;
# cd !$ :把上个命令的参数作为cd参数使用
{}:可承载一个以逗号分隔的路径列表,能够将其展开为指定的多个路径;
例如:
/tmp/{a,b,c} /tmp/a /tmp/b /tmp/c
/tmp/{a,b}/z /tmp/a/z /tmp/b/z
# pwd:显示当前目录 print working directory
# mkdir:创建目录 make directory
-p: 先创建父目录
-v:显示详细信息
# rmdir:删除空目录 remove directory
命令:ls
# ls : 查看文件(注意:在一个目录下的其他目录都是该目录的文件,一切皆文件
bash特性之二:shell的引用
‘‘:强引用,变量替换不会进行
"":弱引用,能够执行变量替换
``:命令引用(替换),引用命令的执行结果,命令替换的另外一符号:$(命令)
变量替换:${变量名}
# echo : 回显变量值
命令引用:
bash的特性之三:命令历史
bash保存的过去曾经执行的命令的列表
当前shell进程保存在缓冲区中
缓冲区中的命令会在shell退出时保存至文件中,.bash_history
使用上下箭头键可以翻看此前曾经执行过的命令
history快捷方式:
!#: #为命令历史列表中的命令编号,可用执行第#条命令
!!: 执行上一条命令(重复执行,执行过的命令)
!-#: 执行命令历史列表中的倒数第#条命令
!string: 执行命令历史列表中最近一次以string开头的命令
!$: 引用上个命令的最后一个参数 先按ESC,再按.
history常用选项:
-c : 清空列表
-d# : 删除指定的历史命令
-a : 追加当前会话的命令历史到历史文件中
-n : 从历史文件中读取所有未被读取的行
-r : 读取历史文件并将内容追加到历史列表中
命令历史相关环境变量:
HISTSIZE:命令历史中可以保存的命令的个数
HISTFILE:命令历史文件
HISTFILESIZE:命令历史文件可以保存的命令的个数
HISTCONTROL:控制命令历史生成
ignoredups:忽略记录重复的命令,连续相同命令才为重复
ignorespace:不记录以空白字符开头的命令
ignoreboth:同时具有以上值的特性
补充:Linux文件系统的另外一特性:以点号开头的文件为隐藏文件:# ls -a:才能查看隐藏文件
# cat 查看文本文件内容
shell中的变量赋值:
变量名=值
注意:变量在赋值时不能使用$,而$只在变量替换时使用
变量名只能包含字母,数字和下划线,而且不能以数字开头
变量名区别大小写:
bash的特性之四:命令别名(alias)
alias :显示当前shell中定义的所有别名
命名别名
# alias 别名=‘原始命令‘(没有空格可以不加引号)
撤销别名
# unalias 别名
bash的特性之五:globbing, 文件名通配
通配符:
*:匹配任意长度的任意字符
abc abb abm xab ab
ab*
*ab
*ab*
?: 匹配任意单个字符(全文件名精确匹配)
[]: 匹配指定字符范围内的任意单个字符
a[xyz]b:
[a-z]
[A-Z]
[0-9]
[0-9a-zA-Z] 默认情况下是不区分大小写
[[:upper:]] = [A-Z] 所有大写字母
[[:lower:]] 所有小写字母
[[:alpha:]] 所有字母表
[[:digit:]] 所有数字
[[:alnum:]] 所有字母表+数字
[[:space:]] 所有空白符
[[:punct:]] 所有标点符号
[^]: 匹配指定字符范围外的任意单个字符
[^0-9]=[^[:digit:]]
练习:
复制/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位数字的文件或目录至/tmp下
l*[0-9]*[[:lower:]]
1、复制/etc目录下以p开头,中间跟了任意字符,并以d结束的文件至/tmp目录中:
2、复制/etc/目录下以p开头,中间跟了4个任意字符,并以d结尾的文件至/tmp/a目录中:如果a不存在,先创建出来
3、复制/etc/目录下以任意一位数字开头,并以非数字结尾的文件至/tmp/b目录下
4、复制/etc/目录下以非字母开头,后面跟了一个字母及其他任何长度字符的文件至/tmp/c目录中
1、cp -r /etc/p*d/tmp
2、cp -r/etc/p????d /tmp/a
3、cp -r/etc/[0-9]*[^0-9]/tmp/b目录下
4、cp -r/etc/[^[:alpha:]][[:aipha:]]*/tmp/c
5、自学——Linux的学习进度与任务【shell中bash的特性】