写点什么

Shell 内建命令:Shell 的内在魔力

作者:左诗右码
  • 2024-06-20
    上海
  • 本文字数:1802 字

    阅读完需:约 6 分钟

Shell 内建命令:Shell 的内在魔力

shell 内建命令(内置命令)

今天我们来深入挖掘一下 Shell 的内在魔力——内建命令。


通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数。

检查一个命令是否是内建命令


# cd 是一个内建命令type cd# cd is a shell builtin
# 可见 ifconfig 是一个外部文件,它的位置时 /sbin/ifconfigtype ifconfig# ifconfig is /sbin/ifconfig
复制代码

Bash Shell 内建命令

alias 给命令创建别名

查看所有别名

# 不带任何参数,则列出当前 shell 进程中所有别名alias
复制代码

设置别名

# 为获取当前的 unix 时间戳设置别名 timestampalias timestamp='date +%s'
复制代码

删除别名

# 删除 timestamp 别名unalias timestamp
复制代码

echo 用于在终端输出字符串

默认在末尾加上了换行符

不换行


#!/bin/bash
name="Alex"age=26height=168weight=62echo -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=26height=168weight=62echo -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=26height=168weight=62echo -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" 姓名 性别 体重kgprintf "%-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/bashecho "before exit" # 只会输出 before exitexit 1echo "after exit" # 不会输出
复制代码

declare 和 typeset 用来设置变量属性

typeset 已经被废弃,建议使用 declare


declare 的用法为:


# - 表示设置属性# + 表示取消属性# aAfFgilprtux 表示具体的选项declare [+/-] [aAfFgilprtux] [变量名=变量值]
复制代码


aAfFgilprtux 支持的选项有:




#!/bin/bash# 将变量声明为整数并进行计算
declare -i x y retx=11y=22ret=$x+$yecho $ret # 33
复制代码


内建命令是 Shell 的核心功能,它们提供了快速且强大的工具来处理日常任务。掌握这些内建命令,可以帮助你更高效地编写 Shell 脚本和命令行程序。


希望这篇文章能够帮助你更好地理解和使用 Shell 内建命令。

发布于: 刚刚阅读数: 5
用户头像

左诗右码

关注

全网同名,欢迎关注交流。 2018-11-22 加入

三观比五官更正,思想比套路更深。常用技术栈PHP、Go、Python,享受编程,平时爱好写点文章。V公主号:「左诗右码」,欢迎关注交流。

评论

发布
暂无评论
Shell 内建命令:Shell 的内在魔力_Shell_左诗右码_InfoQ写作社区