BASH基础特性
对BASH做一下总结 一、命令历史特性:history shell进程会其会话中保存此前用户提交执行过的命令 history是shell的内置命令 1.命令语法格式: history [-c] [-dOFFSET] [n] history -anrw [FILENAME] history -psVALUE[VALUE...] -c: 清空命令历史; -d offset(偏移量):删除指定命令历史,offset为history显示出来的命令数字 -r: 从文件读取命令历史至历史列表中; -w:把历史列表中的命令追加至历史文件中; history #:显示最近的#条命令; 2.相关环境参数,实现定制环境变量的功能 HISTSIZE:shell进程可保留的命令历史的条数; HISTFILE:持久保存命令历史的文件,默认为.bash_history HISTFILESIZE:命令历史文件的存储历史命令数量条数; HISTCONTROL:控制命令历史记录的方式 ignoredups:忽略重复的命令; ignorespace:忽略以空白字符开头的命令; ignoreboth:以上两者同时生效; 3.调用命令历史列表中的命令 !#:再一次执行历史列表中的第#条命令; !-#:执行倒数第几条命令; !!:再一次执行上一条命令; !STRING:再一次执行命令历史列表中最近一个以STRING开头的命令; 注:命令的重复执行有时候需要依赖于幂等性; 4.调用上一条命令的最后一个参数: 快捷键:ESC,. ALT+.远程终端可能不支持该方法 字符串:!$ 二、BASH补全特性 1.命令查找和补全机制: (1)查找内部命令; (2)根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名; (3)给定开头的部分字符串如果能惟一标识某命令程序文件,则直接补全; 不能惟一标识某命令程序文件,再击tab键一次,会给出列表; 2.路径补全 在给定起始路径下,以对应路径下的打头字串逐一匹配起始路径下每个文件: TAB按键; 如果能惟一标识,则直接补全; 否则,再一次tab,给出列表; 3.命令行展开 ~:自动展开为用户的家目录,或指定的用户的家目录; {}:花括号展开。可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径; 三、命令执行状态结果特性 1.bash通过状态返回值来输出此结果: 成功:0 失败:1-255 注意:命令正常执行时,有的还会有命令返回值: 根据命令及其功能不同,结果各不相同; 2.状态返回值保存于bash的特殊变量:$? 3.引用命令的执行结果:$(COMMAND)或`COMMAND` 四、命令行编辑特性(快捷键) Ctrl+a:跳转至命令行行首 Ctrl+e:跳转至命令行行尾 Ctrl+u:删除行首至光标所在处之间的所有字符; Ctrl+k:删除光标所在处至行尾的所有字符; Ctrl+l:清屏,相当于clear 五、文件名通配(globbing)特性 1.globbing:整体文件名匹配,而非匹配部分文件名 [root@localhost ~]# whatisglob glob (3) - find pathnames matching a pattern,free memory from glob glob (3p) - generate pathnames matching a pattern glob (7) - Globbing pathnames glob.h [glob] (0p) - pathname pattern-matching types [root@localhost ~]# man 7 glob 2.匹配模式:元字符(一组代替一个或多个字符的字符) 元字符:具有特殊意义的专用字符,可以用来规定其前导字符在目标对象的出现模式 *:匹配任意长度的任意字符,包括空字符 ?:匹配任意单个字符 []:匹配指定范围内的任意单个字符 例如[abc]、[a-z]、[A-Z]、[a-zA-Z]、[A-Z]、[0-9]、[a-z0-9] 特殊格式: [[:upper:]]:所有大写字母 [[:lower:]]:所有小写字母 [[:alpha:]]:所有字母 [[:digit:]]:所有数字 [[:alnum:]]:所有的字母和数字 [[:space:]]:所有空白字符 [[:punct:]]:所有标点符号 [^]:匹配指定范围外的任意单个字符 例如:[^[:upper:]]、[^0-9]、[^[:alnum:]] 六、IO重定向及管道 1. IO重定向:一切皆文件,包括设备都可以作为IO重定向文件 (1)程序IO设备 可用于输入的设备:文件。键盘设备、文件系统上的常规文件、网卡等; 可用于输出的设备:文件。显示器、文件系统上的常规文件、网卡等; (2)数据流种类: 输入的数据流;<-- 标准输入(stdin),键盘; 输出的数据流:--> 标准输出(stdout),显示器; 错误输出流: --> 错误输出(stderr),显示器; (3)文件描述符,fd : file descriptor 标准输入:0 标准输出:1 错误输出:2 (4)用法说明 1)覆盖输出重定向:> 2)追加输出重定向:>> 3)错误输出重定向:2>(错误覆盖)2>>(错误追加) 4)合并正常输出流和错误输出流: 方法一:&>,&>> 方法二:COMMAND > /path/to/somefile 2>&1 COMMAND >> /path/to/somefile 2>&1 5)输入重定向:< 6)Here Document:<< cat << EOF cat > /PATH/TO/SOMEFILE << EOF 7)特殊设备:/dev/null数据黑洞 # set命令: [root@localhost ~]# type set set is a shell builtin [root@localhost ~]# help set set: set[--abefhkmnptuvxBCHP][-o option-name][arg ...] Set or unset values of shell options and positional parameters. Change the value of shell attributes and positional parameters,or display the names and values of shell variables. # set -C禁止覆盖输出重定向至已存在的文件; 此时可使用强制覆盖输出:>| # set +C关闭上述特性 2.管道:组合小程序完成重要任务 连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流 格式:COMMAND1 | COMMAND2 | COMMAND3 | … 七、命令hash特性 1.hash命令定义:缓存此前命令的查找结果(命令位置,不包括内置命令) hash缓存---->发起新的额请求 2.命令的缓存结果和命令的参数无关 3.hash不是外部命令,所以记录不了自己的位置 确定并记住每一个给定NAME名称的命令的完整路径 hash:查看hash -d:忘记每一个已经记住的命令位置,删除指明的命令 不用给定完整路径,只要给定命令名称即可 -r:忘记所有的位置 注意:当把命令程序位置改变之后,再次调用该命令程序,系统会先调用现在hash缓存中前一次已经记录下来的命令位置,此时出错。需要清空hash -r 缓存此命令此前的查找结果:key-value键值格式数据 4.bash查询命令顺序 命令行模式直接输入、history命令(记录过去所输入过的命令)调用输入 ---->hash缓存命令路径(加速、一切皆缓存思想) ---->若未找到,从左向右遍历PATH环境变量所定义的各路径下文件 八、多命令执行控制 1.并行控制:~]# COMMAND1; COMMAND2; COMMAND3; … 执行次序:从左到右, 命令间没有逻辑关系,完成一个之后再进行下一个 2.逻辑控制执行:与&&、或||、非! ==========状态结果做逻辑运算,给多个命令之间建立执行时的逻辑关系========== ==========控制语句的执行的逻辑能减少语句的运行========== (1)逻辑运算 1)运算数:真(true,yes,on,1) 假(false,no,off,0) 2)与:只有两者为真结果才为真,否则都为假 1 && 1 = 1 1 && 0 = 0 0 && 1 = 0 0 && 0 = 0 3)或:一个为真就为真 1 || 1 = 1 1 || 0 = 1 0 || 1 = 1 0 || 0 = 0 4)非:取反 ! 1 = 0 ! 0 = 1 (2)短路法则: 1)~]# COMMAND1 && COMMAND2 COMMAND1为“假”,则COMMAND2不会再执行; 否则,COMMAND1为“真”,则COMMAND2必须执行; 2)~]# COMMAND1 || COMMAND2 COMMAND1为“真”,则COMMAND2不会再执行; 否则,COMMAND1为“假”,则COMMAND2必须执行; 示例:~]# id $username || useradd $username 九、bash的配置文件 1.登录类型 (1)交互式登录shell进程: 直接通过某终端输入账号和密码后登录打开的shell进程; 使用su命令:su - USERNAME,或者使用 su -l USERNAME执行的登录切换; (2)非交互式登录shell进程: su USERNAME执行的登录切换; 图形界面下打开的终端; 运行脚本 2.配置文件类型:仅管理员可修改全局配置文件 (1)profile类:为交互式登录的shell进程提供配置 功用:用于定义环境变量;运行命令或脚本; 全局:/etc/profile、/etc/profile.d/*.sh 用户个人:~/.bash_profile (2)bashrc类:为非交互式登录的shell进程提供配置 功用:定义本地变量;定义命令别名; 全局:/etc/bashrc 用户个人:~/.bashrc 3.bash路径搜索 交互式登录shell进程: /etc/profile --> /etc/profile.d/* --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc 非交互式登录shell进程: ~/.bashrc --> /etc/bashrc --> /etc/profile.d/* 4.定义生效方法 (1)命令行中定义的特性,例如变量和别名作用域为当前shell进程的生命周期; (2)配置文件定义的特性,只对随后新启动的shell进程有效; 让通过配置文件定义的特性立即生效: 1) 通过命令行重复定义一次; 2) 让shell进程重读配置文件; ~]# source /PATH/FROM/CONF_FILE ~]# . /PATH/FROM/CONF_FILE (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |