除了以文件形式保存在/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 llll 是 `ls -l' 的别名
▼使用type命令显示函数的详细信息
$ hello() { echo 'hello, world!'; } ←----- 定义 hello 函数$ type hellohello 是函数hello (){ ←----- 函数体的代码 echo 'hello, world!'}
▼将不存在的命令作为参数会报错
$ type xxx-bash: type: xxx: 未找到
这时,type命令的退出状态码为1。反过来,如果命令存在于那几种类型之中,那么退出状态码为0
5、set命令
▼第1个功能是显示当前shell中的所有变量。如果在执行set命令时没有指定任何参数,那么该命令就会输出当前shell中设置的变量及其值的列表,以及函数名和函数体的列表。
$ setbash=/bin/bashbash_aliases=()bash_argc=()bash_argv=()bash_cmds=()bash_lineno=()bash_source=()……以下省略……
▼也可以用来显示函数信息像type
▼使用set -o命令显示所有选项的状态
$ set -oallexport offbraceexpand onemacs onerrexit off……以下省略……
▼使用set命令覆盖位置参数的值
#!/bin/bashecho $1, $2, $3, $4set 111 222 333echo $1, $2, $3, $4运行:$ ./set_parameter.sh aaa bbb ccc dddaaa, bbb, ccc, ddd111, 222, 333, ←----- set 命令修改了位置参数的内容
6、unset
unset命令用于删除shell中的变量。使用方法为“unset变量名,删以后为空字符串
$ name=miyake$ echo name = $namename = miyake$ unset name$ echo name = $namename =
标记为readonly的变量想删也删不掉
7、input
read命令用于从标准输入读取一行数据,其使用方法如下。
#!/bin/bashecho 'delete file?'read input ←--------- 从标准输入读取 1 行数据并赋值给变量 inputif [[ $input == yes ]]; then echo 'delete'else echo 'cancel'fi
▼根据键盘的输入执行不同的处理
$ ./read_input.shdelete file?yes ←----- 用户的输入delete
▼将标准输入的内容逐行输出到标准输出
#!/bin/bashwhile read line ←----------- 标准输入的 1 行内容被不断地赋值给变量 linedo printf '%s' $linedone
注意事项:read命令会将解析为转义字符。因此后面即使是ifs所包含的字符,也不能实现单词分割的功能。特别是,如果在行尾,那么换行符也会被忽略,这一行和下一行会被当成一行读取。要想禁止这一功能,可以使用-r选项。该选项可以让符号不再具有特殊的含义,即使出现在行尾,这一行也会和下一行保持独立,不会连到一起。
8、wait命令
wait命令用于等待在后台运行的进程的结束。在以后台的方式运行比较耗时的处理时,如果想等待所有处理结束,就可以使用wait命令
#!/bin/bash./task1.sh &./task2.sh &waitecho finish
9、eval
eval命令可以将参数指定的字符串当作shell的命令行解析并执行
例如eval ls ~
ls ~命令会被执行。这和直接在脚本中写入ls ~是一样的
荣耀V9其实很良心,安卓市场的最强旗舰并不是虚名
用于生物传感的更高效的NIR-II纳米管探针的研究
基于ADSP-TS201处理器的归一化互相关快速算法实现
国内LED车灯企业该如何发力?
川土微电子CA-IS398X在PLC领域中的应用
shell脚本本身自带的命令详解
有了这块Moye板 马桶盖都能变成无线充电板
怎样用Arduino从LDR读取模拟值
新型高效抗反射金属材料实现激光解吸附离子化质谱分析
中控智慧科技考勤机新iClock360介绍
苹果发布最强第三财季财报:营收533亿美元 净利润115亿美元
Parker派克C3驱动器技术特点
CAN H与 CAN L短路故障排除
这款FPGA芯片厉害了!同时兼容多达29种不同厂商的图像传感器
魔珐科技亮相第五届运博会,3D虚拟人消费级AIGC产品“面对面”体验!
趣头条确定IPO价格区间 预计于9月14日登陆纳斯达克
浅谈能源管理系统在钢铁企业上的应用
什么蓝牙耳机好,性价比高的四款蓝牙耳机测评
全能型农药残留检测仪的相关性能描述
浅谈电力系统中变压器提高抗短路能力的措施