除了以文件形式保存在/usr/bin下面的命令,shell脚本中还可以使用shell本身自带的命令,即内置命令
1、:命令
它不做任何处理,并且永远将0作为退出状态码,也被称为空命令(null command),由于空命令返回的退出状态码永远为0,所以它也可以像下面这样用于编写无限循环的控制结构。因此true命令和:命令除了名称不一样,其余都是一样的。
while : ←-----(本行及以下3行)使用了空命令的无限循环 do 处理内容 done
2、echo/printf
echo命令比较简单不做过多介绍
▼echo命令的选项有-n、-e和-E。-n选项用于设置不让脚本输出行尾的换行符。其实准确来说,echo命令会在参数后面加上一个换行符并将其输出到标准输出中。但是,如果使用了-n选项,echo命令就不会在行尾添加换行符了。
▼printf命令和echo命令不同,不会在输出的行尾添加换行符。如果想输出换行符,需要在格式字符串中显式地添加 。另外,echo命令的-e选项中支持的转义字符也可以在printf中使用。唯一的例外是在输出8进制的ASCII码字符时,echo命令使用的是�nnn,而printf不需要前面的0,写成 nn就可以了。
3、command命令和builtin命令
函数的优先级高于可执行文,在这种情况下,要想执行优先级较低的内置命令或者可执行文件,可以使用内置命令command。command命令的使用方法为“command命令名”,使用它就可以只在内置命令和可执行文件中查找并执行指定的命令。
这种情况下,就可以使用command命令或者builtin命令设置执行命令的优先顺序。
4、type命令
type命令用于判断指定的命令的类型。该命令可以输出参数中命令的类型,即别名、保留字、函数、内置命令、可执行文件中的任意一个
▼使用type命令显示别名的详细信息
$ alias ll='ls -l' $ type ll ll 是 `ls -l' 的别名
▼使用type命令显示函数的详细信息
$ hello() { echo 'Hello, world!'; } ←----- 定义 hello 函数 $ type hello hello 是函数 hello () { ←----- 函数体的代码 echo 'Hello, world!' }
▼将不存在的命令作为参数会报错
$ type xxx -bash: type: xxx: 未找到
这时,type命令的退出状态码为1。反过来,如果命令存在于那几种类型之中,那么退出状态码为0
5、set命令
▼第1个功能是显示当前shell中的所有变量。如果在执行set命令时没有指定任何参数,那么该命令就会输出当前shell中设置的变量及其值的列表,以及函数名和函数体的列表。
$ set BASH=/bin/bash BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_LINENO=() BASH_SOURCE=() ……以下省略……
▼也可以用来显示函数信息像type
▼使用set -o命令显示所有选项的状态
$ set -o allexport off braceexpand on emacs on errexit off ……以下省略……
▼使用set命令覆盖位置参数的值
#!/bin/bash echo "$1, $2, $3, $4" set 111 222 333 echo "$1, $2, $3, $4" 运行: $ ./set_parameter.sh aaa bbb ccc ddd aaa, bbb, ccc, ddd 111, 222, 333, ←----- set 命令修改了位置参数的内容
6、unset
unset命令用于删除shell中的变量。使用方法为“unset变量名,删以后为空字符串
$ name=miyake $ echo "name = $name" name = miyake $ unset name $ echo "name = $name" name =
标记为readonly的变量想删也删不掉
7、input
read命令用于从标准输入读取一行数据,其使用方法如下。
#!/bin/bash echo 'delete file?' read input ←--------- 从标准输入读取 1 行数据并赋值给变量 input if [[ $input == yes ]]; then echo 'DELETE' else echo 'CANCEL' fi
▼根据键盘的输入执行不同的处理
$ ./read_input.sh delete file? yes ←----- 用户的输入 DELETE
▼将标准输入的内容逐行输出到标准输出
#!/bin/bash while read line ←----------- 标准输入的 1 行内容被不断地赋值给变量 line do printf '%s ' "$line" done
注意事项:read命令会将解析为转义字符。因此后面即使是IFS所包含的字符,也不能实现单词分割的功能。特别是,如果在行尾,那么换行符也会被忽略,这一行和下一行会被当成一行读取。要想禁止这一功能,可以使用-r选项。该选项可以让符号不再具有特殊的含义,即使出现在行尾,这一行也会和下一行保持独立,不会连到一起。
8、wait命令
wait命令用于等待在后台运行的进程的结束。在以后台的方式运行比较耗时的处理时,如果想等待所有处理结束,就可以使用wait命令
#!/bin/bash ./task1.sh & ./task2.sh & wait echo finish
9、eval
eval命令可以将参数指定的字符串当作shell的命令行解析并执行
例如eval ls ~
ls ~命令会被执行。这和直接在脚本中写入ls ~是一样的
全部0条评论
快来发表一下你的评论吧 !