shell的功能:提供给用户操作系统的接口。
bash的优点:命令记忆功能、命令和文件补全功能、命令别名设置功能、作业控制、前台、后台控制、程序脚本。
一、type判断命令是外部命令(非bash所提供的命令)还是内置在bash的命令。
命令 | 说明 |
---|
type name | 不加参数,type会显示出name命令是外部命令还是bash内置命令。 |
type -t name | 加‘-t’参数,type会将name命令以file、alias、builtin字眼显示其意义。 |
type -p name | 如果后面接的命令为外部命令时,才会显示完整文件名。 |
type -a name | 会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias。查看命令执行顺序,先alias,再builtin,最后由$PATH找到绝对路径。 |
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d266ba39d0ab41ab5da00a8ad786b7eb.png)
二、shell的变量设置
命令 | 说明 |
---|
echo $PATH | 显示变量PATH的内容。 |
echo ${PATH } | 显示变量PATH的内容。 |
变量的设置规则 | 示例 |
---|
变量与变量的内容以一个‘=’来连接。 | “qq=test”。 |
等号两边不能直接接空格符。 | 错误示例:“qq= test”或“myname=test test”。 |
变量名称只能是英文字母和数字,但开头不能是数字。 | 错误示例:“2qq=test”。 |
变量内容有特殊符号可使用单引号括起来,单引号内的特殊字符仅为一般字符(即纯文本)。 | 示例:若“qq=‘this is a $LANG’”,则“echo $qq”显示“this is a $LANG”。 |
变量内容有特殊符号可使用双引号括起来,双引号内的特殊字符如$可以保有原本的特性。 | 示例:若“qq=“this is a $LANG””,则“echo $qq”显示“this is a zh_CN.UTF-8”。 |
可用转义字符将特殊字符(如[Enter]、$、\、空格符、!等)变成一般字符。 | |
在一串命令中,还需要通过其他命令提供信息,可使用反单引号“`命令`”(左上方数字1左边的按键)或“$(命令)”。 | 示例:显示内核版本设置变量“version=`uname -r`”,则"echo $version"显示“2.6.32-642.el6.x86_64”;“version=$(uname -r)”,则“echo $version”显示2.6.“32-642.el6.x86_64”。 |
增加变量内容,可使用 "
变
量
名
称
"
或
变量名称"或
变量名称"或{变量名称}。 | 示例“qq="$qq"gg”或“qq=${qq}gg”。 |
若该变量需要在其他子进程中执行,则需要以export来使变量变成环境变量。 | 示例:“export qq”,进入子进程使用“bash”命令,离开子进程使用“exit”命令。 |
通常大写字符为系统默认变量,自定义变量可使用小写字符,方便判断。 | |
取消变量的方法为使用“unset 变量名称”。 | 示例:“unset qq”。 |
三、查看环境变量
命令 | 说明 |
---|
env | 查看环境变量。 |
export | 查看环境变量。 |
set | 查看所有变量(含环境变量和自定义变量)。 |
export qq | 将自定义变量qq变成环境变量。 |
影响显示结果的语系变量 | 说明 |
---|
locale | 影响显示结果的语系变量,可在/etc/sysconfig/i18n文件中更改语系编码。 |
读取来自键盘的变量 | 说明 |
---|
read qq | 不加任何参数,直接加变量名称,则会出现一个空白行等待你的输入。 |
read -p “Please input your name ” -t 30 qq | 读取来自键盘输入的变量内容,‘-p’后面跟提示语,‘-t’后面接等待输入的时间,30秒之内没有任何输入则略过此命令。 |
声明变量的类型 | 说明 |
---|
declare | 和set一样,显示所有的变量名称和内容。 |
declare -a qq | 将变量qq定义为数组(array)类型。 |
declare -i qq | 将变量qq定义为整数数字(integer)类型。 |
declare -x qq | 和export一样,将变量qq变成环境变量。 |
declare -r qq | 将变量qq定义为readonly类型,该变量不可被更改内容,也不能重设。 |
declare -p qq | 列出变量qq的类型。 |
declare +x qq | 取消环境变量,让qq变成自定义变量。 |
四、变量内容的删除
变量内容的删除与替换 | 说明 |
---|
echo ${path#/*:} | 从变量“path”中删除符合替换文字“/*:”的“最短的”那一个。“#”从变量内容的最前面开始向右删除,且仅删除最短的那个。 |
echo ${path##/*:} | 从变量“path”中删除符合替换文字“/*:”的“最长的”那一个。“##”从变量内容的最前面开始向右删除,且仅删除最长的那个。 |
echo ${path%:*bin} | 从变量“path”中删除符合替换文字“:*bin”的“最长的”那一个。“%”从变量内容的最后面开始向左删除,且仅删除最短的那个。 |
echo ${path%%:*bin} | 从变量“path”中删除符合替换文字“:*bin”的“最长的”那一个。“%%”从变量内容的最前面开始向左删除,且仅删除最长的那个。 |
echo ${path/sbin/SBIN} | 若变量内容符合旧字符串“,则第一个旧字符串会被新字符串替换”。 |
echo ${path//sbin/SBIN} | 若变量内容符合旧字符串“,则第一个旧字符串会被新字符串替换”。 |
qq=${qq-test} | 判断qq变量是否不存在,若不存在则将内容设为“test”,若存在或为空字符串则使用已有的设置。 |
qq=${qq:-test} | 判断qq变量是否为空或不存在,若不存在或为空则将内容设为“test”,若存在则使用已有的设置。 |
别名命令 | 说明 |
---|
alias | 列出所有命令别名。 |
alias vi=‘vim’ | 设置vim的别名为vi。 |
unalias vi | 取消vim的别名。 |
历史命令 | 说明 |
---|
history | 列出所有的命令,具体的命令数量与HISTSIZE设置有关。 |
history n | 列出最近的n条命令 |
history -a histfile | 将目前新增的history命令新增入histfile中,若‘-a’后面没加histfile,则默认写入~/.bash_history。 |
history -c | 将目前shell中的所有history内容全部消除。 |
history -r histfile | 将histfile的内容读到目前这个shell的history记忆中。 |
history -w histfile | 将目前shell中的history内容写入histfiles中。 |
!n | 执行history中第n条命令。 |
!cd | 由最近的命令向前搜索命令串开头为“path”的那个命令。 |
!! | 执行上一条命令。 |
!3 | 执行第3条条命令。 |