shell 内建命令(内置命令)
今天我们来深入挖掘一下 Shell 的内在魔力——内建命令。
通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数。
检查一个命令是否是内建命令
# cd 是一个内建命令
type cd
# cd is a shell builtin
# 可见 ifconfig 是一个外部文件,它的位置时 /sbin/ifconfig
type ifconfig
# ifconfig is /sbin/ifconfig
复制代码
Bash Shell 内建命令
alias 给命令创建别名
查看所有别名
# 不带任何参数,则列出当前 shell 进程中所有别名
alias
复制代码
设置别名
# 为获取当前的 unix 时间戳设置别名 timestamp
alias timestamp='date +%s'
复制代码
删除别名
# 删除 timestamp 别名
unalias timestamp
复制代码
echo 用于在终端输出字符串
默认在末尾加上了换行符
不换行
#!/bin/bash
name="Alex"
age=26
height=168
weight=62
echo -n "${name} is ${age} years old, "
echo -n "${height}cm in height "
echo "and ${weight}kg in weight."
echo "Thank you!"
# Alex is 26 years old, 168cm in height and 62kg in weight.
# Thank you!
复制代码
输出转义字符
#!/bin/bash
name="Alex"
age=26
height=168
weight=62
echo -e "${name} is ${age} years old,\n "
echo -n "${height}cm in height "
echo "and ${weight}kg in weight."
echo "Thank you!"
# Alex is 26 years old,
#
# 168cm in height and 62kg in weight.
# Thank you!
复制代码
强制不换行
#!/bin/bash
name="Alex"
age=26
height=168
weight=62
echo -e "${name} is ${age} years old,\c "
echo -e "${height}cm in height "
echo "and ${weight}kg in weight."
echo "Thank you!"
# Alex is 26 years old,168cm in height
# and 62kg in weight.
# Thank you!
复制代码
printf
#!/bin/bash
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" alex 男 62.3452
# 姓名 性别 体重kg
# alex 男 62.35
复制代码
read 用来从标准输入中读取数据并赋值给变量
如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。
read 命令的用法为:
# options 表示选项
# variables 表示用来存储数据的变量,可以有一个,也可以有多个
read [-options] [variables]
复制代码
options 支持的选项有:
#!/bin/bash
# 使用 read 命令给多个变量赋值
read -p "Enter your name, age and city ===> " name age city
echo "你的名字为:${name}"
echo "你的年龄为:${age}"
echo "你所在的城市为:${city}"
# Enter your name, age and city ===> alex 26 Shanghai
# 你的名字为:alex
# 你的年龄为:26
# 你所在的城市为:Shanghai
#########################################################
#!/bin/bash
# 在指定时间内输入密码
if
read -t 20 -sp "Enter password in 20 seconds(once) ====> " pass1 && printf "\n" && # 第一次输入密码
read -t 20 -sp "Please confirm your password again in 20 seconds ====> " pass2 && printf "\n" && # 确认密码
[ $pass1 == $pass2 ] # 判断两次输入的密码是否相等
then
echo "your password is ok!"
else
echo "Invalid password"
fi
复制代码
exit 用来退出当前 shell 进程,并返回一个退出状态
可以使用 $?
接收这个退出状态
可以接受一个整数值作为参数,代表退出状态,如果不指定,默认状态值是 0
退出状态为 0 表示成功,退出状态非 0 表示执行出错或失败
退出状态只能是一个介于 0~255
之间的整数,其中只有 0 表示成功,其他值都表示失败
#!/bin/bash
echo "before exit" # 只会输出 before exit
exit 1
echo "after exit" # 不会输出
复制代码
declare 和 typeset 用来设置变量属性
typeset 已经被废弃,建议使用 declare
declare 的用法为:
# - 表示设置属性
# + 表示取消属性
# aAfFgilprtux 表示具体的选项
declare [+/-] [aAfFgilprtux] [变量名=变量值]
复制代码
aAfFgilprtux 支持的选项有:
#!/bin/bash
# 将变量声明为整数并进行计算
declare -i x y ret
x=11
y=22
ret=$x+$y
echo $ret # 33
复制代码
内建命令是 Shell 的核心功能,它们提供了快速且强大的工具来处理日常任务。掌握这些内建命令,可以帮助你更高效地编写 Shell 脚本和命令行程序。
希望这篇文章能够帮助你更好地理解和使用 Shell 内建命令。
评论