目录
Shell内建命令,是由Bash自身提供的命令,而不是文件系统中的某个可执行文件。
可以使用 type 来确定一个命令是否是内建命令。
type 命令
Bash Shell 内建命令:
命令 | 说明 |
---|---|
: | 扩展参数列表,执行重定向操作 |
. | 读取并执行指定文件中的命令(在当前shell环境中) |
alias | 为指定命令定义一个别名 |
bg | 将作业以后台模式运行 |
bind | 将键盘序列绑定到一个readline函数或宏 |
break | 退出for、while、select或until循环 |
builtin | 执行指定的shell内建命令 |
caller | 返回活动子函数调用的上下文 |
cd | 将当前目录切换为指定的目录 |
command | 执行指定的命令,无需进行通常的shell查找 |
compgen | 为指定单词生成可能的补全匹配 |
complete | 显示指定的单词是如何补全的 |
compopt | 修改指定单词的补全选项 |
continue | 继续执行for、while、select或until循环的下一次迭代 |
declare | 声明一个变量或变量类型。 |
dirs | 显示当前存储目录的列表 |
disown | 从进程作业表中刪除指定的作业 |
echo | 将指定字符串输出到STDOUT |
enable | 启用或禁用指定的内建shell命令 |
eval | 将指定的参数拼接成一个命令,然后执行该命令 |
exec | 用指定命令替换shell进程 |
exit | 强制shell以指定的退出状态码退出 |
export | 设置子shell进程可用的变量 |
fc | 从历史记录中选择命令列表 |
fg | 将作业以前台模式运行 |
getopts | 分析指定的位置参数 |
hash | 查找并记住指定命令的全路径名 |
help | 显示帮助文件 |
history | 显示命令历史记录 |
jobs | 列出活动作业 |
kill | 向指定的进程ID(PID)发送一个系统信号 |
let | 计算一个数学表达式中的每个参数 |
local | 在函数中创建一个作用域受限的变量 |
logout | 退出登录shell |
mapfile | 从STDIN读取数据行,并将其加入索引数组 |
popd | 从目录栈中删除记录 |
printf | 使用格式化字符串显示文本 |
pushd | 向目录栈添加一个目录 |
pwd | 显示当前工作目录的路径名 |
read | 从STDIN读取一行数据并将其赋给一个变量 |
readarray | 从STDIN读取数据行并将其放入索引数组 |
readonly | 从STDIN读取一行数据并将其赋给一个不可修改的变量 |
return | 强制函数以某个值退出,这个值可以被调用脚本提取 |
set | 设置并显示环境变量的值和shell属性 |
shift | 将位置参数依次向下降一个位置 |
shopt | 打开/关闭控制shell可选行为的变量值 |
source | 读取并执行指定文件中的命令(在当前shell环境中) |
suspend | 暂停Shell的执行,直到收到一个SIGCONT信号 |
test | 基于指定条件返回退出状态码0或1 |
times | 显示累计的用户和系统时间 |
trap | 如果收到了指定的系统信号,执行指定的命令 |
type | 显示指定的单词如果作为命令将会如何被解释 |
typeset | 声明一个变量或变量类型。 |
ulimit | 为系统用户设置指定的资源的上限 |
umask | 为新建的文件和目录设置默认权限 |
unalias | 刪除指定的别名 |
unset | 刪除指定的环境变量或shell属性 |
wait | 等待指定的进程完成,并返回退出状态码 |
Shell alias命令
alisa用来给命令创建一个别名。
alias new_name='command'
alias 自定义别名='命令'
注意: 别名只能在当前Shell进程中使用,在子进程和其它进程中都不能使用。当前Shell进程结束后,别名也随之消失。要想让别名对所有的Shell进程都有效,需要把别名写入Shell配置文件。Shell进程每次启动时都会执行配置文件中的代码做一些初始化工作,将别名放在配置文件中,那么每次启动进程都会定义这个别名。
Shell unalias命令
使用unalias内建命令可以删除当前Shell进程中的别名。
1.删除指定的别名。
unalias 别名
2.删除当前 Shell 进程中所有的别名。
unalias -a
注意: 这两种方法都是在当前 Shell 进程中生效的。要想永久删除配置文件中定义的别名,只能进入该文件手动删除。
Shell echo命令
echo是Shell内建命令,用来在终端输出字符串,并在最后默认加上换行符。
echo命令输出结束后默认会换行,如果不需要换行,可以加上-n参数。
echo -n "字符串"
默认情况下,echo不会解析以反斜杠\开头的转义字符,通过添加-e参数来让echo命令解析转义字符。
echo -e "字符串"
Shell read命令
read是Shell内置命令,用来从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认从键盘读取用户输入的数据;如果进行了重定向,就从文件中读取数据。
read [-options] [variables]
options:选项。
variables:用来存储数据的变量,可以有一个,也可以有多个。
如果没有提供变量名,那么读取的数据将存放到环境变量REPLY中。
Shell read命令支持的选项:
选项 | 说明 |
---|---|
-a array | 把读取的数据赋值给数组array,从下标0开始。 |
-d delimiter | 用字符串delimiter指定读取结束的位置,而不是一个换行符(读取到的数据不包括delimiter)。 |
-e | 在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。 |
-n num | 读取num个字符,而不是整行字符。 |
-p prompt | 显示提示信息,提示内容为prompt。 |
-r | 原样读取(Raw mode),不把反斜杠字符解释为转义字符。 |
-s | 静默模式(Silent mode),不会在屏幕上显示输入的字符。常用于输入密码。 |
-t seconds | 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么read将会返回一个非0的退出状态,表示读取失败。 |
-u fd | 使用文件描述符fd作为输入源,而不是标准输入,类似于重定向。 |
代码1
test4_1.sh
通过键盘输入信息。
#!/bin/bash
read -p "输入信息 > " name ShenGao age
echo "名字:${name}"
echo "身高:${ShenGao}"
echo "年龄:${age}"
给予可执行权限。
chmod 777 test4_1.sh
运行
./test4_1.sh
结果
注意:必须在一行内输入所有的值,不能换行,否则只能给第一个变量赋值,后续变量都会赋值失败。
代码2
只读取一个字符。
test4_2.sh
#!/bin/bash
read -n 1 -p "输入字符 > " char
printf "\n" #换行
echo $char
给予可执行权限。
chmod 777 test4_2.sh
运行
./test4_2.sh
结果
代码3
只读取一个字符。
test4_3.sh
#!/bin/bash
read -t 20 -sp "20秒内输入密码:" pass1 && printf "\n" #第一次输入密码
read -t 20 -sp "20秒内再次输入密码:" pass2 && printf "\n" #第二次输入密码
if [[ ${pass1} == ${pass2} ]] #判断两次输入的密码是否相等
then
echo "密码相同"
else
echo "密码不同"
fi
给予可执行权限。
chmod 777 test4_3.sh
运行
./test4_3.sh
结果
Shell exit命令
exit是一个Shell 内置命令,用来退出当前Shell进程,并返回一个退出状态;使用$?可以接收这个退出状态。
exit命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是0。一般情况下,退出状态为0 表示成功,退出状态为非0 表示执行失败(出错)了。exit退出状态只能是一个介于 0~255 之间的整数,其中只有0表示成功,其它值都表示失败。Shell进程执行出错时,可以根据退出状态来判断具体出现了什么错误。
代码4
test4_4.sh
#!/bin/bash
echo "befor exit"
exit 8
echo "after exit"
给予可执行权限。
chmod 777 test4_4.sh
运行
./test4_4.sh
结果
Shell declare命令
declare是 Shell 内建命令,用来设置变量的属性。
declare [+/-] [aAfFgilprtux] [变量名=变量值]
-表示设置属性,+表示取消属性,aAfFgilprtux表示具体的选项。 -表示设置属性,+表示取消属性,aAfFgilprtux表示具体的选项。
选项 | 含义 |
---|---|
-f [name] | 列出之前由用户在脚本中定义的函数名称和函数体。 |
-F [name] | 仅列出自定义函数名称。 |
-g name | 在 Shell 函数内部创建全局变量。 |
-p [name] | 显示指定变量的属性和值。 |
-a name | 声明变量为普通数组。 |
-A name | 声明变量为关联数组(支持索引下标为字符串)。 |
-i name | 将变量定义为整数型。 |
-r name[=value] | 将变量定义为只读(不可修改和删除),等价于 readonly name。 |
-x name[=value] | 将变量设置为环境变量,等价于 export name[=value]。 |
代码5
将变量声明为整数并进行计算。
test4_5.sh
#!/bin/bash
declare -i m n ret #将多个变量声明为整数
m=10
n=20
ret=${m}+${n}
echo ${ret}
给予可执行权限。
chmod 777 test4_5.sh
运行
./test4_5.sh